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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
#1

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

20.04.2012, 07:21. Просмотров 487. Ответов 7
Метки нет (Все метки)

Суть задачи такая - нужно подсчитать, сколько целых чисел содержится в произвольной строке. Числа разделены пробелами (причём любым количеством), т.е. числа в словах типа: 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, но не суть). Благодарю за комментарии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 07:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество слов в строке (C++):

Количество слов в заданной строке (для каждого из слов) - C++
дано символьная строка. Слово-последовательность символов между пробелами, не содержащие пробелы усередени себя. Для каждого из слов...

Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву - C++
Определить количество средних слов в строе и какое из слов начинается на большую по коду букву. Напишите плз код данной программы...

В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд). - C++
В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).

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

Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение. - C++
Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом...

Подсчитать количество всех строк, а потом - количество слов в каждой строке - C++
Программа считает количество строк в файле add.txt выводит на экран и записывает в новый указанный пользователем файл. #include...

7
zitxbit
88 / 740 / 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;
}
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
20.04.2012, 10:35  [ТС] #3
zitxbit, ага, это хорошо, спасибо. Только strtok нельзя юзать
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 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;
}
Вывод.
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
20.04.2012, 11:04  [ТС] #5
Toshkarik, спасибо

Сейчас заценю. Но сразу заметил, что будет работать неправильно, если строка не кончается пробелом.
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
20.04.2012, 11:05 #6
Почему нельзя юзать strtok?
1
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
20.04.2012, 11:07 #7
Проглядел, замените строку
C++
1
if ( stroka[ i ] == ' ' )
на
C++
1
if ( stroka[ i ] == ' ' || stroka[ i ] == '\0' )
Добавлено через 33 секунды
Цитата Сообщение от zitxbit Посмотреть сообщение
Почему нельзя юзать strtok?
Потому что в задании сказано не использовать указатели и библиотечные функции.
1
Schizorb
509 / 461 / 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 ] == ' ' ))
Но видимо так и придётся все эти выражения в цикле проверять, ничего проще на ум не приходит. Если вынести отдельно проверку на то, что строка начинается с числа, будет лишняя морока. Ну да ладно. Главное, избавили меня от библиотечных функций, за это спасибо
0
20.04.2012, 11:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 11:13
Привет! Вот еще темы с ответами:

Количество слов в строке - C++
как сделать так чтобы количество символов в строке по которым цикл должен пробежать определялось во время ввода. но при вводе получается...

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

Количество слов в строке - C++
Надо задать пользователю ввести строку с клавиатуры, вывести каждое слово по отдельности и около каждого указать, сколько раз оно...

Количество слов в строке - C++
Вводится строка, подсчитать количество слов в строке которые начинаются на ту же букву на которое заканчивается предыдущее слово. в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru