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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
ivan732
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 7
#1

Поиск количества слов строке(как можно проще) - C++

05.03.2012, 15:32. Просмотров 1697. Ответов 10
Метки нет (Все метки)

Здравствуйте.Я недавно начал изучать с++ и столкнулся с проблемой. Нужно написать программу поиска количества слов строке, но как можно проще ,ограничиваясь базовыми библиотеками. Нужно использовать ассоциативный массив,но я его не знаю если кто поможет кодом с пояснениями буду благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2012, 15:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск количества слов строке(как можно проще) (C++):

Поиск заданной буквы в строке. Определения количества слов - C++
В заданной строке определить количество слов, в которых заданная буква встречается больше одного раза. Язык С. Помогите пожалуйста!

Подсчет количества слов в строке - C++
Помогите пожалуйста написать программу для подсчета количества слов в строке

Нахождение количества слов в строке - C++
Задается строка S состоящая из латинских букв и пробелов. Найти количество слов в этой строке.

Найти количества слов в строке - C++
Здравствуйте. Как найти число слов в строке string, при условии что слова могут разделяться несколькими пробелами?

Подсчёт количества слов в строке - C++
Помогите разобраться в проблемке. Программа должна считывать текст из файла по слову и копировать его в другой. При этом счётчик их...

можно написать ее как то проще ? - C++
#include <stdio.h> #include <locale.h> #include <string> #include <conio.h> int main() { setlocale(LC_CTYPE, "rus"); ...

10
Rexer
164 / 163 / 20
Регистрация: 10.10.2010
Сообщений: 725
05.03.2012, 15:52 #2
Можно было б использовать strtok() для разбивки строки на слова,а потом их посчитать
0
ivan732
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 7
05.03.2012, 15:58  [ТС] #3
Цитата Сообщение от Rexer Посмотреть сообщение
Можно было б использовать strtok() для разбивки строки на слова,а потом их посчитать
К сожалению не слышал. На форуме увидел код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <sstream>
#include <conio.h>
int main()
{
   std::string str;
   std::getline(std::cin, str);
   std::stringstream ss(str);
   int i(0);
   while(ss >> str)
        i++;
   system("cls");
   std::cout << i;
   std::getchar();
   getch();
   return 0;
}
Он находит количество слов, но за слова принимает и запятые ,и тд. Можно ли это исправить и поясните сам код ,пожалуйста.
0
MrCold
857 / 755 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
05.03.2012, 16:10 #4
http://www.cyberforum.ru/cpp-beginners/thread448812.html
0
Rexer
164 / 163 / 20
Регистрация: 10.10.2010
Сообщений: 725
05.03.2012, 16:30 #5
Этот код считает количество символов,а не слов.
А про strtok() почитайте на http://cplusplus.com/reference/clibrary/cstring/strtok/
Вы можете сделать так
Вводите строку.Считываете ее.Это будет,в простейшей реализации нечто такое
C++
1
2
3
char s[100];
cout << "Enter string: ";
cin.getline(s,100);
Далее,вы идете по строке простым for-ом
C++
1
2
3
4
5
6
for(int i = 0; i < strlen(s) - 1; i++)
{
if(s[i] != ' ' && s[i + 1] == ' ')
//значит i это конец слова нашего
countWord++;
}
что-то такое я думаю вам надо реализовать.
Там подхватите идею и развейте ее.
Либо уже можно использовать cpp-ые методы,там как вы уже написали целая библиотека есть string,попробуйте почитать про нее
1
easybudda
Модератор
Эксперт CЭксперт С++
9913 / 5836 / 975
Регистрация: 25.07.2009
Сообщений: 11,004
05.03.2012, 16:35 #6
Цитата Сообщение от ivan732 Посмотреть сообщение
но за слова принимает и запятые ,и тд.
Не знаю, по каким правилам "запятые и тд" могут в предложении в отрыве от слов стоять, но если так хочется от них избавиться, просто поменяйте их на пробелы
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
#include <iostream>
#include <string>
#include <sstream>
 
size_t count_words(const std::string & str, const std::string & delim){
    std::string tmp(str);
    size_t i = 0;
    while ( ( i = tmp.find_first_of(delim, i) ) != std::string::npos )
        tmp[i] = ' ';
    std::istringstream ist(tmp);
    i = 0;
    while ( ist >> tmp )
        ++i;
    
    return i;
}
 
int main(){
    const std::string DELIM(",.?!:;\t\n"); // добавить по вкусу
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() )
        std::cout << count_words(str, DELIM) << " words." << std::endl;
    
    return 0;
}
Цитата Сообщение от Rexer Посмотреть сообщение
Этот код считает количество символов,а не слов.
Да ну?! Слова разделённые пробелами он считает.

Добавлено через 2 минуты
Цитата Сообщение от ivan732 Посмотреть сообщение
Нужно использовать ассоциативный массив
Кстати, это тут к чему?
1
ivan732
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 7
05.03.2012, 16:40  [ТС] #7
Кстати, это тут к чему?
Вобще еще нужно вывести количество одинаковых слов например: мама-2 раза папа-4 раза и тд.
Буду разбираться
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
05.03.2012, 17:06 #8
из Брайана Кернигана, Денниса Ритчи "Язык программирования Си"
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
/* подсчет строк входного потока */
main()
{
    int c, nl;
    nl = 0;
    while ((с = getchar()) != EOF)
        if (c == '\n')
            ++nl;
    printf(%d\n”, nl);
}
как видишь, никаких дополнительных библиотек не используется.
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.03.2012, 17:07 #9
remarkes, Строки не всегда есть слова.
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
05.03.2012, 17:18 #10
Цитата Сообщение от easybudda Посмотреть сообщение
Кстати, это тут к чему?
(про асс. массив)
видимо, человек до этого изучал что-то высокоуровневое, типа PHP и Javascript

Добавлено через 7 минут
ForEveR, ой, пардон ... тогда так:
из K&R
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
//~ подсчет количества слов из K&R
 
#include <stdio.h>
 
#define IN 1    /* внутри слова */
#define OUT 0   /* вне слова */
 
/* подсчет строк, слов и символов */
int main()
{
    int c, nl, nw, nc, state;
    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF) {
        ++nc;
        if (c == '\n')
            ++nl;
        if (c == ' ' || c == '\n' || c == '\t')
            state = OUT;
        else if (state == OUT) {
            state = IN;
            ++nw;
        }
    }
    printf("строк: %d, слов: %d, букв: %d\n", nl, nw, nc);
    return 0;
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//~ подсчет количества слов (упрощенная версия)
 
#include <stdio.h>
 
/* создана из подсчета строк входного потока K&R */
int main()
{
    int c, nl;
    nl = 0;
    while ((c = getchar()) != EOF)
    if (c == ' ')
        ++nl;
    printf("%d\n", nl);
    return 0;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9913 / 5836 / 975
Регистрация: 25.07.2009
Сообщений: 11,004
05.03.2012, 17:20 #11
Цитата Сообщение от ivan732 Посмотреть сообщение
Вобще еще нужно вывести количество одинаковых слов
И это много раз было
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <map>
 
int main(){
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ){
        std::istringstream ist(str);
        std::map<std::string, size_t> map;
        while ( ist >> str )
            map[str]++;
        for ( std::map<std::string, size_t>::const_iterator i = map.begin(); i != map.end(); ++i )
            std::cout << std::left << std::setw(20) << i->first << i->second << std::endl;
    }
    
    return 0;
}
0
05.03.2012, 17:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2012, 17:20
Привет! Вот еще темы с ответами:

Доработка программы (Подсчет количества слов в строке) - C++
Нужно подсчитать количество слов в строке s разделенных пробелами, или запятой. Для этого нужно использовать функцию: int Words (s). Нельзя...

Определение количества слов четной длины в строке - C++
Помогите пожалуйста,при выполнении данного коды выдаётся ошибка, помогите пожалуйста исправить // сколько слов в строке чётной...

нужно решить как можно проще - C++
в текстовом файле подсчитать количество строк, которые начинаются и оканчиваются одной и той же буквой

Можно ли это написать как то проще - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; using namespace std; /* В одномерном...


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

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

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