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