Форум программистов, компьютерный форум CyberForum.ru

Количество слов в строке - C++

Восстановить пароль Регистрация
 
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
20.04.2012, 07:21     Количество слов в строке #1
Суть задачи такая - нужно подсчитать, сколько целых чисел содержится в произвольной строке. Числа разделены пробелами (причём любым количеством), т.е. числа в словах типа: number33, 45st, dd44ff не считаются.

Алгоритм я написал, но вероятно намудрил (особенно в строке 14 не нравится много проверок). Просто прошу покритиковать, и если кто может предложить свой вариант.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <cstring>
#include <cctype>
 
int main()
{
    char stroka[256] = " 33  adasf 87  7656asf7a f8saf76f 6754 81 2 "; // тут 5 чисел
    int len = strlen(stroka);
    int count = 0;
        
    for(int i = 0; i < len; ++i)
    {
        // если встречаем цифру (причём предыдущий - пробел, или мы в начале строки)
        if(isdigit(stroka[i]) && (i == 0 || stroka[i - 1] == ' '))
        {   
            // двигаемся по цифрам
            while(i < len && isdigit(stroka[++i]));
            
            // если достигли пробела или конца
            // значит это было число
            if(i >= len || stroka[i] == ' ')
                ++count;
        }
    }
    
    std::cout << "Numbers: " << count << "\n";
        
    return 0;
}
Ещё условие было такое - не использовать указатели и библиотечные функции для работы со строками (у меня правда есть strlen и isdigit, но не суть). Благодарю за комментарии.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 07:21     Количество слов в строке
Посмотрите здесь:

C++ Количество слов в строке
C++ Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение.
C++ В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).
C++ Количество слов в строке
Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
20.04.2012, 10:05     Количество слов в строке #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
bool isnum(char* psz);
 
int _tmain(int argc, _TCHAR* argv[])
{
    static char psz[256] = "335 work 1234 w fruit g kenig 666 s fork 3468 d lord 112";
 
    int count = 0;
    for (char* token = strtok(psz," "); 
        token != NULL; token = strtok(NULL," "))
        if (isnum(token)) count++;
 
    printf("count = %d\n",count);
    _getch();
 
    return 0;
}
 
bool isnum(char* psz)
{
    for (int i = 0; i < strlen(psz); i++)
        if (isalpha(psz[i])) return false;
    return true;
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
20.04.2012, 10:35  [ТС]     Количество слов в строке #3
zitxbit, ага, это хорошо, спасибо. Только strtok нельзя юзать
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.04.2012, 10:57     Количество слов в строке #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    char stroka[ 256 ] = " 33  adasf 87  7656asf7a f8saf76f 6754 81 2 ";
    int count = 0;
    
    for ( int i = 0; stroka[ i ] != '\0'; i++ ) {
       if ( stroka[ i ] >= '0' && stroka[ i ] <= '9' && ( i == 0 || stroka[ i - 1 ] == ' ' )) {
          while ( stroka[ i ] >= '0' && stroka[ i ] <= '9' )
            i++;
            
          if ( stroka[ i ] == ' ' )
            count++;
       }
    }
    
    std::cout << count << std::endl;
    
    return 0;
}
Вывод.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
20.04.2012, 11:04  [ТС]     Количество слов в строке #5
Toshkarik, спасибо

Сейчас заценю. Но сразу заметил, что будет работать неправильно, если строка не кончается пробелом.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
20.04.2012, 11:05     Количество слов в строке #6
Почему нельзя юзать strtok?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.04.2012, 11:07     Количество слов в строке #7
Проглядел, замените строку
C++
1
if ( stroka[ i ] == ' ' )
на
C++
1
if ( stroka[ i ] == ' ' || stroka[ i ] == '\0' )
Добавлено через 33 секунды
Цитата Сообщение от zitxbit Посмотреть сообщение
Почему нельзя юзать strtok?
Потому что в задании сказано не использовать указатели и библиотечные функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 11:13     Количество слов в строке
Еще ссылки по теме:

C++ Массив символов (Подсчитать количество слов в строке, при условии, что в качестве разделителя слов используется один или несколько пробелов)
Количество слов в заданной строке (для каждого из слов) C++
C++ Подсчитать количество всех строк, а потом - количество слов в каждой строке

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
20.04.2012, 11:13  [ТС]     Количество слов в строке #8
Toshkarik, ну это понятно... Но я, в основном, из-за этой строчки заморачивался:
C++
1
if ( stroka[ i ] >= '0' && stroka[ i ] <= '9' && ( i == 0 || stroka[ i - 1 ] == ' ' ))
Но видимо так и придётся все эти выражения в цикле проверять, ничего проще на ум не приходит. Если вынести отдельно проверку на то, что строка начинается с числа, будет лишняя морока. Ну да ладно. Главное, избавили меня от библиотечных функций, за это спасибо
Yandex
Объявления
20.04.2012, 11:13     Количество слов в строке
Ответ Создать тему
Опции темы

Текущее время: 23:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru