1. Си / Говнокод #6978

    +139

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    #include <cstdio>
    #include <malloc.h>
    
    int number;
        printf("Int to c_str convertation whith separator: ");
        do {
            printf("Enter a number (int): ");
        }
        while (!scanf ("%d",&number));
        bool negative = number<0;
        number=abs(number);
        char* reversed = (char*)(malloc(sizeof(char)));
        *reversed = 0;
        int divider=1;
        unsigned char i=3;
        int buf;
        int val = 0;
        int size=1;
       forever{
            buf=number%(divider*10);
            i--;
            size++;
            reversed = (char*)(realloc(reversed,size*sizeof(*reversed)));
            *(reversed+size*sizeof(*reversed)-1) = (buf-val)/divider+48;
            divider*=10;
            val=buf;
            if (!i){
                size++;
                reversed = (char*)(realloc(reversed,size*sizeof(*reversed)));
                *(reversed+size*sizeof(*reversed)-1)=32;
                i=3;
            }
            if (buf==number) {break;}
        }
        if (negative){
            size++;
            reversed = (char*)(realloc(reversed,size*sizeof(*reversed)));
            *(reversed+size*sizeof(*reversed)-1)='-';
        }
        char* output = (char*)(malloc(size*sizeof(*reversed)));
        for (i=0;i<size*sizeof(*reversed);i++){
            *(output+i) = *(reversed+size*sizeof(*reversed)-((1+i)*sizeof(*reversed)));
        }
         printf("Number as char* is: %s",output);

    Выводит число в строку, вставляя пробел после каждых 3-х цифр.

    Запостил: Sacha_D, 17 Июня 2011

    Комментарии (3) RSS

    • <cstdio> и bool - Вы пишете на C++, а не на C. под "forever" скрывается "while(1)", а лаба эта решается так:
      #include        <locale>
      #include        <iostream>
      #include        <sstream>
      class   space_as_1000_separator : public std::numpunct_byname<char> {
          public:
              explicit space_as_1000_separator(const char* name, size_t refs = 0) :
                  std::numpunct_byname<char>(name, refs)
              {
              }
          protected:
              virtual std::numpunct<char>::char_type do_thousands_sep() const{
                  return ' ';
              }
              virtual std::string do_grouping() const{
                  return std::string(8, 3);
              }
              virtual ~space_as_1000_separator(){}
      };
      
      int     main(int argc, char* argv[]){
      
          unsigned    i;
      
          int         number;
      
          const char* loc_name = "C";
      
          std::locale space_as_1000_separator_locale(std::locale(loc_name), new space_as_1000_separator(loc_name));
      
          for(i=1; i < argc ; i++){
              std::istringstream      istm(argv[i]);
              istm>>number;
              if(istm.eof() && !istm.fail()){
                  std::ostringstream  ostm;
                  ostm.imbue(space_as_1000_separator_locale);
                  ostm<<number;
                  std::cout<<ostm.str()<<std::endl;
              }else{
                  std::cout<<argv[i]<<" is not a number"<<std::endl;
              }
          }
      
          return 0;
      }

      Прежде чем тащить препу, раскурите маны. Хотя бы раз в семестр.
      Ответить
    • forever
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий