126 / 124 / 107
Регистрация: 09.01.2017
Сообщений: 1,644
1

Посчитать количество слов в строке

19.04.2018, 02:21. Показов 941. Ответов 13
Метки нет (Все метки)

Доброго времени суток. Нужно выяснить, пуст элемент строки или нет:
C++
1
2
3
4
string s;
for(int = 0; i < s.length; i++)
    if(s[i] != '')
        //...
В последней строке ошибка: строка в кавычках должна содержать по крайней мере один символ. Как тогда правильно сравнивать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2018, 02:21
Ответы с готовыми решениями:

Посчитать количество слов в строке
Здравствуйте! Дайте пожалуйста пример функции которая считает количество слов с строке с помощью...

Посчитать количество слов в строке
Задача такая Ввести строку символов. вывести на экран строку, посчитать количество слов в строке....

Посчитать количество слов в строке
Посчитать количество слов в строке

Посчитать количество слов в строке
Всем привет!Зарегался я на форуме недавно,минут 5 назад.У меня есть проблема,моя...

13
1746 / 1339 / 1407
Регистрация: 28.10.2016
Сообщений: 4,266
19.04.2018, 02:24 2
Попробуйте '\0'
0
126 / 124 / 107
Регистрация: 09.01.2017
Сообщений: 1,644
19.04.2018, 02:28  [ТС] 3
Просто прогоняется до конца строки. Это же символ конца строки...
0
1746 / 1339 / 1407
Регистрация: 28.10.2016
Сообщений: 4,266
19.04.2018, 02:32 4
Zwelenewskiy, это пустой символ null-char, который также является символом конца строки
0
Администратор
Эксперт .NET
13869 / 11244 / 4571
Регистрация: 17.03.2014
Сообщений: 22,658
Записей в блоге: 1
19.04.2018, 02:34 5
Zwelenewskiy, если под "пустым" элементом ты имеешь в виду пробел, то нужно проверять так
C#
1
if(s[i] != ' ')
или так
C#
1
if(!char.IsWhiteSpace(s[i]))
Добавлено через 1 минуту
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Это же символ конца строки...
В некоторых языках программирования. В C#/.NET это такой же символ как и остальные.
0
126 / 124 / 107
Регистрация: 09.01.2017
Сообщений: 1,644
19.04.2018, 02:44  [ТС] 6
В общем-то, проблема другая: нужно посчитать кол-во слов в строке. После первого слова цикл идет до конца строки, выходя за ее пределы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void count_words(string &s){
    string tmp;
 
    int i = 0;  
    while (i < s.length() - 1) {
        if (s[i] != ' '){
 
            while (s[i] != ' '){
                tmp += s[i];
                cout << "i = " << i << endl;
                i++;
                
            }
            cout << tmp << endl;
            tmp = "";           
        }
        else {
            cout << "i = " << i << endl;
            i++;
        } 
    }
}
0
Wanna be serious
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
19.04.2018, 05:31 7
Zwelenewskiy, у вас код относящийся к C++, а вы в ветке C#.

Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
нужно посчитать кол-во слов в строке
Для C#, можно было бы разбить текст на предложения, а уже полученные предложения с помощью Split(' ') разбить на слова. Остаётся только дело за малым - получить количество слов в массиве - Count.
0
126 / 124 / 107
Регистрация: 09.01.2017
Сообщений: 1,644
19.04.2018, 09:14  [ТС] 8
Теперь тема на своем старом месте) Хотелось бы сделать разбиение на слова "ручками", без встроенных методов
0
1746 / 1339 / 1407
Регистрация: 28.10.2016
Сообщений: 4,266
19.04.2018, 10:07 9
Zwelenewskiy, слова чем нибудь разделены, кроме пробела?
0
548 / 440 / 359
Регистрация: 05.11.2013
Сообщений: 1,222
Записей в блоге: 6
19.04.2018, 10:13 10
Если бить string вручную, без алгоритмов, векторов и проч. - там достаточно для этого методов, типа школьным кодом как на Паскале

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 <iostream>
#include <string>
using namespace std;
 
int main() { 
 string s0 = "  I'm  a\ttext  from   some  words.   ";
 string c,c0,w;
 bool inword=false;
 string divs=" \t\r\n";
 string s=" "+s0+" ";
 int len = s.size(), start;
 for (int i=1; i<len; i++) {
     string c0 = s.substr(i-1,1);
     string c = s.substr(i,1);
     if (divs.find(c0)!=string::npos && divs.find(c)==string::npos) { 
         inword=true; start=i; 
     }
     if (divs.find(c)!=string::npos) {
         if (inword) {
             w = s.substr(start,i-start+1); //здесь есть очередная лексема w
             cout << w << endl;
         }
         inword = false;
     }
 }
 
 cin.sync(); cin.get(); return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8170 / 5020 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
19.04.2018, 13:49 11
Как-то сложно всё у вас.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
 
int main()
{
    const std::string str = "eniki  beniki eli   vareniki";
    std::istringstream ist(str);
    std::cout << std::distance(std::istream_iterator<std::string>(ist), std::istream_iterator<std::string>());
}
0
548 / 440 / 359
Регистрация: 05.11.2013
Сообщений: 1,222
Записей в блоге: 6
19.04.2018, 16:43 12
Хотелось бы сделать разбиение на слова "ручками", без встроенных методов
...
без алгоритмов, векторов и проч.
0
Форумчанин
Эксперт CЭксперт С++
8170 / 5020 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
19.04.2018, 18:34 13
Это и есть ручками. Без алгоритмов, векторов и т.д.
Просто загнали в буфер и посчитали сколько раз смогли извлечь из буфера.
0
1482 / 946 / 811
Регистрация: 30.04.2016
Сообщений: 3,306
10.05.2018, 23:22 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
#include <bits/stdc++.h> 
#include <windows.h>
 
    using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian"); //Чтобы функция isalpha() работала с русским текстом.
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string str, s;
    cout << "Enter a string:\n";
    getline(cin, str);
    cout << "\nWords after split:\n";
    str += " ";
    for (int i = 0; i < str.size(); i++) {
        s += str[i];
        if (!isalpha((unsigned char)str[i])) //Здесь условие разбиения
        {
            s.pop_back();
            if (s != "") cout << s << "\n"; //Выводим слова в столбик
            s = "";
        }
    }
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2018, 23:22

Посчитать количество слов в строке
Здравствуйте, я не знаю в чем дело, но прога всегда выдает что в строке 1 слово. #include...

Посчитать количество слов в заданной строке
Вычислить значение f= {q}^{sin(x)} функции где q – количество символов, которые надо найти в...

Посчитать количество слов в строке, содержащих 4 буквы
Дорогие форумчане! Пол дня воюю с этой задачей. Разобрался с решением: как сосчитать кол-во слов в...

Посчитать количество слов в строке, оканчивающейся точкой.
имеется код, программка считает правда не слова, а пробелы) проблема в том, что если строка...


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

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

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