Поиск в тексте восьмеричных чисел от 10 до 1000 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Например, дана строка: sdfdsf dscc 11 888 331 1111111 Вывод: 2 (2 восьмеричных числа заданного диапозона)

Решение задачи: «Поиск в тексте восьмеричных чисел от 10 до 1000»

textual
Листинг программы
char strData[10000] = "10 qfsdr 10 9000 1234 dfdfw 33333333333 45 012345678 123.5.5 а45аа";
char strBuf[100] = "";
int i, iDotCnt, OctNumCnt;
BOOL bNotNum, bLastValWasntInWork;
 
OctNumCnt = 0;
bLastValWasntInWork = TRUE;
 
// Слова nbgf '.5' и '5.' считаем числами...
 
while (bLastValWasntInWork )
{ // Перебор слов в строке
    if(strrchr(strData, ' ') == NULL)  bLastValWasntInWork = FALSE;
 
    if(!bLastValWasntInWork) // Обработка последнего слова
        strcpy(strBuf, strData);
    else
    { // Обработка любого слова кроме последнего
        strcpy(strBuf, strrchr(strData, ' ') + 1);
        strcpy(strrchr(strData, ' '),  "\0");
    }
 
    bNotNum = FALSE;
    iDotCnt = 0;
    for(i = 0; i<strlen(strBuf); i++)
    { // Перебор символов в слове: 46, 48-56 - Коды допустимых символов
        if( ( (strBuf[i] < 48) && (strBuf[i] != 46) ) || (strBuf[i] > 56)) bNotNum = TRUE;
        if(strBuf[i] == 46)
        { // Проверка на более одного разделителя целой и дробной частей (если допускаются дробные числа)
            iDotCnt++;
            if (iDotCnt > 1) bNotNum = TRUE;
        }
    }
    if(!bNotNum)
    { // Если слово может являться восьмеричным числом, то проверяется его вхождение в диапазон
        if( (atoi(strBuf) >=10) && (atoi(strBuf) <=10000) )OctNumCnt++;
        //printf("%s\r\n", strBuf);
    }
}
 
printf("%d (%d восьмеричных числа заданного диапозона)\r\n", OctNumCnt, OctNumCnt);

Объяснение кода листинга программы

  1. Объявлены следующие переменные: char strData[10000] = 10 qfsdr 10 9000 1234 dfdfw 33333333333 45 012345678 123.5.5 а45аа; char strBuf[100] = ``; int i, iDotCnt, OctNumCnt; BOOL bNotNum, bLastValWasntInWork;
  2. Инициализированы счетчики и булевые переменные: OctNumCnt = 0; bLastValWasntInWork = TRUE;
  3. В цикле while (bLastValWasntInWork ) происходит перебор слов в строке. Если слово не содержит пробелов, то оно считается последним. Если слово содержит пробелы, то они удаляются из исходной строки.
  4. В каждой итерации цикла проверяется текущее слово на предмет того, является ли оно числом. Если слово не является числом, то оно пропускается. Если слово является числом, то проверяется его диапазон.
  5. Если слово проходит все проверки, то оно добавляется к общему числу найденных восьмеричных чисел.
  6. После завершения цикла выводится общее количество найденных восьмеричных чисел.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы