Поиск в тексте восьмеричных чисел от 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);
Объяснение кода листинга программы
- Объявлены следующие переменные:
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;
- В цикле while (bLastValWasntInWork ) происходит перебор слов в строке. Если слово не содержит пробелов, то оно считается последним. Если слово содержит пробелы, то они удаляются из исходной строки.
- В каждой итерации цикла проверяется текущее слово на предмет того, является ли оно числом. Если слово не является числом, то оно пропускается. Если слово является числом, то проверяется его диапазон.
- Если слово проходит все проверки, то оно добавляется к общему числу найденных восьмеричных чисел.
- После завершения цикла выводится общее количество найденных восьмеричных чисел.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д