Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
1

Количество слов в строке

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

Author24 — интернет-сервис помощи студентам
Суть задачи такая - нужно подсчитать, сколько целых чисел содержится в произвольной строке. Числа разделены пробелами (причём любым количеством), т.е. числа в словах типа: 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2012, 07:21
Ответы с готовыми решениями:

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

Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву
Определить количество средних слов в строе и какое из слов начинается на большую по коду букву. ...

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

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

7
96 / 748 / 279
Регистрация: 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
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
20.04.2012, 10:35  [ТС] 3
zitxbit, ага, это хорошо, спасибо. Только strtok нельзя юзать
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
20.04.2012, 11:04  [ТС] 5
Toshkarik, спасибо

Сейчас заценю. Но сразу заметил, что будет работать неправильно, если строка не кончается пробелом.
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
20.04.2012, 11:05 6
Почему нельзя юзать strtok?
1
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.04.2012, 11:07 7
Проглядел, замените строку
C++
1
if ( stroka[ i ] == ' ' )
на
C++
1
if ( stroka[ i ] == ' ' || stroka[ i ] == '\0' )
Добавлено через 33 секунды
Цитата Сообщение от zitxbit Посмотреть сообщение
Почему нельзя юзать strtok?
Потому что в задании сказано не использовать указатели и библиотечные функции.
1
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2012, 11:13
Помогаю со студенческими работами здесь

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

Узнать из текста в файле количество строк и наибольшее количество слов в строке
Помогите пожалуйста, подсчет строк я вроде сделал, а вот строку с наибольшим количеством слов не...

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

Подсчитать количество слов и количество букв в каждом слове в строке, введённой с клавиатуры
Нужно написать программу, которая считает количество слов и количество букв в каждом слове в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru