0

Доброе утро. Задача: написать прогу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел. Написать то написал, все работает, но не выводит строки :( Можете помочь с выводом?

   #include "vector"
   #include "fstream"
   #include "iostream"
   #include "string"

using namespace std; string chislo; string cifra; int j;

int main(int argc, char* argv[]) {

   vector<string> str1;
   setlocale(LC_ALL, "Rus");
   cout << "Введите свое название файла типа name.xxx: ";
   string fileName;
   cin >> fileName;
   ifstream in(fileName.c_str());
   if (!in.is_open())
   {
       cout << "Такой файл не найден в корневой папке программы!" << endl;
       system("pause");
       return 0;
   }
   cout << "Файл открыт!" << endl;
   cout << endl;
   string str;
   string temp;
   cout << "Исходный  текст" << endl;
   cout << "=================" << endl;
   while (!in.eof()) {
       str = "";
       getline(in, str);
       cout << str << endl;

   }
   in.clear();
   in.seekg(0);
   cout << "Отредактированный  текст" << endl;
   cout << "=================" << endl;
   //Считываем числа в массив
   while (!in.eof())
   {

       in >> cifra;
       str1.push_back(chislo);

   }

   //Проверяем текст на числа
   for (int i = 0; i < str1.size(); i++)
   {

       for (int i = 0; str[i] != '\0'; ++i)
           if (isdigit(str[i]))
           {
               for (int j = i + 1; str[j] != '\0' && isdigit(str[j]); ++j);
               if (j - i == 2)
               {
                   cout << str << endl;
               }
               i = j;
           }
   }
   return 0;

}

return
  • 2,740
  • 3
    Наступит ли когда-то знаменательный день, когда наконец хотя бы неделю никто не напишет это ужасное while (!in.eof())?... По делу - дайте точное определения, что вы ищете. Это должно быть отдельное слово из двух цифр? или просто 2 цифры подряд? aa12dd, aa 12, dd, 135+12=147? Как формально определяется наличие двузначного числа? От этого же зависит и решение... – Harry Jun 15 '20 at 06:38
  • Просто файл, в котором такой текст: "123 4 123 43 1 134" Например. Все они в столбик. И нужно, чтобы программа вывела строки с однозначными – Alex Nel Jun 15 '20 at 06:48
  • Т.е. каждая строка ("Все они в столбик") содержит одно число? И что, теперь условие поменялось - "* нужно, чтобы программа вывела строки с однозначными*" - ранее вы говорили не выводить с двузначными. Поймите, это не цепляние к словам, это суровая реальность - пока нет абсолютно точно сформулированного ТЗ, результат будет один: ХЗ... – Harry Jun 15 '20 at 07:16

1 Answers1

0
int isdigit(char chr);

// includes

#define NUM_LEN 2U

int main() {
    char** strs;
    unsigned long strCount;

    // init `strs`

    unsigned long seqDigitCnt = 0;

    for (unsigned long i = 0; i < strCount; ++i) {
        for (char* chrPtr = strs[i]; *chrPtr; ++chrPtr) {
            if (isdigit(*chrPtr))
                ++seqDigitCnt;
            else if (seqDigitCnt == NUM_LEN) {
                seqDigitCnt = 0;

                std::cout << str << std::endl;

                break;
            }
            else
                seqDigitCnt = 0;
        }

        seqDigitCnt = 0;
    }
}
return
  • 2,740
  • 1
    А что, еще есть компиляторы, которые register понимают? :) – Harry Jun 15 '20 at 06:32
  • тсс... ни слова больше!) (я забыл :) ) – return Jun 15 '20 at 06:34
  • Спасибо) Как это можно в код интегрировать? По ходу внедрения у меня Вижл ругается. – Alex Nel Jun 15 '20 at 06:47
  • @AlexNel ругается по поводу чего – return Jun 15 '20 at 06:49
  • Не распознает < init strs> И не определяет ++seqDigitCnt; – Alex Nel Jun 15 '20 at 06:52
  • @AlexNel так оно и не должно, это вы должны дописать ваш способ считывания строк))) (я исправил на комментарий что вы видели). я так делаю как раз таки чтобы компилятор и ругал, ведь вы должны заменить этот код на ваш. теперь у вас всё будет работать (если замените код, конечно же) – return Jun 15 '20 at 06:53
  • @AlexNel я также исправил код из моего ответа (сделайте его "ре-копинг") – return Jun 15 '20 at 06:59