1. C++ / Говнокод #27088

    0

    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
    void two(string str, int *mstr,int l)    //Замена цифр в строке
    {
        string base[10] = { "ноль","один","два","три","четыре","пять","шесть","семь","восемь","девять" };    //Строки для замены
        int i,j,t;
    
        for (i = 0;i < l;i++)
        {
            str.insert(mstr[i]+1, base[atoi(&str[mstr[i]])]);    //Вставка после числа в строку
            t = base[atoi(&str[mstr[i]])].length();        //Смещение последующих чисел в строке
            str.erase(mstr[i], 1);        //Удаление цифры в строке
    
            for (j = i; j < l;j++)        //Новые позиции чисел в строке
            {
                mstr[j] += t-1;
            }
    
        }
    
        cout << "Изменённая строка: " << str << endl;
    }

    По заданию требовалось обработать символьную строку так, чтобы цифры записывались числительными. В этой функции идет замена цифр в строке. Массив str - строка символов, mstr - int массив, куда записывается позиция числа в строке (т.е в строке aaaa1aaa mstr[0]=4), а l - количество чисел в строке.
    Код не мой. Это ад. Неработающий.
    Сидел, ржал.

    Запостил: ShadowCat, 07 Ноября 2020

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

    • Я тебя услышал. Теперь смотрим, как это делается на языке для белых:
      $string = str_replace(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], ["ноль","один","два","три","четыре","пять","шесть","семь","восемь","девять"], $number);
      Ответить
      • Я хочу, чтобы двое уёбищ, поставивших мне по минусу, объяснились за свои действия.
        Ответить
    • > atoi

      Если там 2 цифры подряд, к примеру "11", то atoi вернёт 11 и будет вылет за границу массива base. Не надо так.

      Можно просто base[str[mstr[i]] - '0'] раз мы уже знаем что там цифра
      Ответить
      • У него единственный рабочий тест на числа рядом - 000 по понятным причинам.
        Ответить
        • Переходи на PHP. У нас всё проще, без мозгоёбки.
          Вообще не понимаю тех, кто упорно сидит на C/C++ - откровенно НЕДОРАБОТАННОМ языке.
          Ответить
          • Боюсь, вуз не оценит
            Ответить
            • Окончишь ты ВУЗ по специальности "сиплюсплюсник", и куда дальше с таким БАХАЖОМ знаний?
              Ответить
              • У меня ИВТ специальность, а не плюсник. Имхо, главное понимать алгоритм, а на него можно любой язык наплести, хоть brainfuck, хотя не отрицаю, что знать особенности языка, например функцию str_replace, через которую вы лаконично функцию сделали, бывает полезно. Тем более изучение "языка" в вузе происходит по большей части в полу-самостоятельном виде и ничто не мешает изучить другой язык самому, если есть желание.
                Ответить
                • ты же понимаешь, что не стоит слишком серьезно относиться к словам человека с ником "ротоёб"?
                  Ответить
                  • Да понимаю, просто привычка любым ротоебам отвечать с натянутой вежливостью, даже если они откровенно байтят. На плюсах, кстати, тоже есть функция str_replace, правда не совсем так, как на пхп работает, пойду документацию почитаю лучше.
                    Ответить
                    • Нету там такой, к сожалению :(

                      Там только по координатам замена, емнип.
                      Ответить
                • > У меня ИВТ специальность, а не плюсник.

                  А что, разве бывает специальность "программист на C++" ? Это ж примерно как специальность "откручиватель гаек".
                  Ответить
                  • я думал что с++ такой сложный что на него нужно высшее образование получать
                    Ответить
                    • единственная причина почему не вручают нобелевскую причину за программы на нем это то что комитет просто еще не дорос его понимать
                      Ответить
                    • Угу, причем желательно три
                      * по языку
                      * по шаблонам
                      * по изучению стандарта.
                      Ответить
                      • И чтоб отдельные спецкурсы по разгребанию шаблоноговна вперемешку с сишным препроцессором, нахождение там багов. Экзамен на понимание ошибки от компилятора, когда он высирает эту ошибку на тыщу строк.
                        Ответить
                        • и только пхпшник, генерирующий JavaScript с помощью PHP может их понять
                          Ответить
                        • сначала прочитал "нахождение там багров"

                          какой сленг )))
                          Ответить
                  • Ну вот Сёма получил образование по специальности "делатель веб сайтов на питоне", хз как это по немецки будет
                    Ответить
            • Как скоро ты вуз окончишь?
              Ответить
              • Долго еще, пока только второй курс недообразования, лаба вообще должника за второй семестр
                Ответить
                • Уныло, должно быть, сидеть над языком с затхлым амбре восьмидесятых, на котором невозможно с первого же дня начать разработку, который сначала надо учить, учить и учить, долго и муторно? Помню, PHP учить не пришлось вообще - сходу начинаешь разрабатывать проект, лишь периодически заглядывая в документацию, и течёшь от наслаждения.
                  Ответить
                • а через std::map
                  Ответить
              • Кончил тебе на волосы.
                Ответить
      • мы тогда завяжемся на кодировку
        Ответить
        • Цифры даже в ёбадике подряд были, емнип...
          Ответить
          • были, но разве это важно?
            нельзя завязываться
            Ответить
    • сложно
      я за

      std::string data("12345100500"), result, base[] = { "ноль","один","два","три","четыре","пять","шесть","семь","восемь","девять" };
          char str[2]{};
      
          for(std::string::const_iterator it = data.begin(); it != data.end(); ++it) {
              str[0] = *it;
              result += base[atoi(str)];
          }
          std::cout << result;
      Ответить
      • Более удобоваримо для прочтения, но строк всё равно дохуища для такой плёвой функции. Поэтому я за PHP.
        Ответить
      • Там же вроде не только цифры на входе.
        Ответить
    • какой atoi )))
      Ответить

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