Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 10.05.2017
Сообщений: 19
1

Определить количество слов в строке

07.06.2017, 22:14. Показов 3225. Ответов 17

Author24 — интернет-сервис помощи студентам
определить количество слов в строке, если строка представляет собой набор символов разделенных любым количеством пробелов
Реализовать по символьной обработкой символов
Помогите плз !!!!!
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2017, 22:14
Ответы с готовыми решениями:

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

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

Определить количество слов в строке
Задачка в том что вывести сколько слов в строке, нужно чтобы ёщо разделяло слова запятыми, ну и...

Определить количество слов в строке
Здравствуйте уважаемые форумчане! Будучи первокурсником выполнял лабораторные работы по C++. И...

17
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
07.06.2017, 22:33 2
datanyan, здравствуйте! Я не знаю, что вы имели ввиду под посимвольной обработкой, но выкладываю такой вариант решения (хотя это можно сделать проще):

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
30
31
#include <iostream>
#include <string>
#include <windows.h> //Шрифт консоли - Lucida Console
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int k;
    string a, b;
    cout << "Введите строку [ENG] (слова разделяются пробелами):" << endl;
    getline(cin, a);
    a = a + ' ';
    k = 0;
    for (int i = 0; a[i]; i++)
    {
        b += a[i];
        if (a[i] == ' ') //Разделителем служит пробел
        {
            b.pop_back();
            if (b != "")
                k++;
            b = "";
        }
    }
    cout << "Количество слов: " << k << endl;
    system("pause");
    return 0;
}
0
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
07.06.2017, 22:44 3
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
30
31
32
33
34
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
int NumberWords(const std::string);
int main(void)
{
    std::string line("Hello World! Im studying C Plus Plus!");
    int N(NumberWords(line));
    std::cout << line << std::endl << std::endl << N << " words." << std::endl << std::endl;
    std::cin.get();
    return 0;
}
 
int NumberWords(const std::string line)
{
    std::vector<std::string> words;
    std::string temp;
    bool flag(false); // Были ли записи в temp?
    for (auto &ch : line) { // Идем по всем символам строки
        if (isalpha(ch)) { // Если это буква
            temp += ch; // Добавляем в temp ( собираем слово )
            flag = true; // "Говорим" что строка не пустая
        }
        else if (flag) { // Если встретилась не буква и запись в temp была произведена
            words.push_back(temp); // Добавляем строку
            temp.clear(); // Очищаем temp
            flag = false; // Ставим в положение "Не найдено" и идём искать дальше слова.
        }
    }
    if(flag) // Как только Все_Слова-1 нашли, осталось последнее, если запись в temp была...
        words.push_back(temp); // добавляем слово
    return words.size(); // Узнаем размер (кол-во хранимых слов) и возвращаем как целочисленную переменную.
}
Добавлено через 7 минут
Если так и не поняли для чего флаг, то можете убрать его и увидите, что оно будет добавлять пустые строки в которые не было произведено ни какой записи. Думаю вы "андэстэнд" для чего flag?!
0
1 / 1 / 0
Регистрация: 10.05.2017
Сообщений: 19
08.06.2017, 02:43  [ТС] 4
мне нужно сделать без использывания библиотек vector string и algorithm
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
08.06.2017, 03:22 5
Fixer_84, у вас переменная k не инициализирована. Стандарт не дает гарантии, что k будет равняться 0.
anapshy, так будет правильнее: unsigned int NumberWords(const std::string &line)
0
823 / 626 / 321
Регистрация: 24.02.2017
Сообщений: 2,209
08.06.2017, 08:22 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int main()
{
  char str[]="  Character  processing of words  ";
  int flag=0,quantity=0,i=0;
 
  while(str[i]!='\0')
  {
   if (isalpha(str[i]))
   flag++;
   if(flag==1)
     quantity++;
   if(str[i]==32)
   flag=0;
   i++;
   }
   cout<<quantity<<"\n";
   system("pause");
   return 0;
}
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
08.06.2017, 08:36 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int Words(char* s) {
    int w = 0;
    int l = strlen(s) ;
    for(int i = 0; i < l; i++) {
        if ((s[i-1] == ' ' || s[i-1] == NULL) && (s[i] != ' ')) w++;
        if (s[i] == NULL) break;
    }
    return w;
}
int main()
{
    char str[]="  Character  processing of words  ";
    cout<<Words(str)<<"\n";
    system("pause");
    return 0;
}
0
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
08.06.2017, 09:01 8
Цитата Сообщение от Nemovok Посмотреть сообщение
(const std::string &line)
И... А если человек не хочет, чтоб исходный текст изменялся?
0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
08.06.2017, 09:04 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
 
int main(void){
    char s[] = " bla   bla  apl ada   end   fin  final";
 
    int c, w = 0, n = 0;
    const char*   p = s;
    do {
        c = *p++;
        if(c && !is_space(c))
            w = 1;
        else if(w){
            ++n;
            w = 0;
        }
    } while(c);
 
    std::cout << "count words: " << n << std::endl;
    std::cin.get();
    return 0;
}
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
08.06.2017, 12:51 10
Цитата Сообщение от anapshy Посмотреть сообщение
И... А если человек не хочет, чтоб исходный текст изменялся?
Вы все равно передаете по константной ссылке. И ваш код не меняет содержимое строки.
0
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
08.06.2017, 13:03 11
Nemovok, а ну Да, там же const
0
1 / 1 / 0
Регистрация: 10.05.2017
Сообщений: 19
10.06.2017, 19:16  [ТС] 12
А как ещё можно сделать
0
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
10.06.2017, 19:19 13
datanyan, куда ещё больше то?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
11.06.2017, 09:38 14
Лучший ответ Сообщение было отмечено MrGluck как решение

Решение

Цитата Сообщение от datanyan Посмотреть сообщение
А как ещё можно сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::string str = " Eniki   beniki   eli    vareniki   ";
    
    std::istringstream strm(str);
    
    std::cout << std::distance(std::istream_iterator<std::string>(strm), std::istream_iterator<std::string>()) << "\n";
}
1
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
11.06.2017, 10:06 15
GbaLog-,
Цитата Сообщение от datanyan Посмотреть сообщение
мне нужно сделать без использывания библиотек vector string и algorithm
Добавлено через 11 минут
у меня почему-то 5 выдаёт
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <tuple>
#include <climits>
#include <cstdlib>
#include <unistd.h>
#include <termios.h>
#include <map>
 
 
 
int main(int argc, char *argv[])
{
    std::string str = " Eniki   beniki   eli    vareniki   ";
 
    size_t wordsCount = [](const std::string& str)
    {
        bool isSpace = false;
        size_t counter = 0;
 
        for(const char& c : str)
        {
            if (isspace(c))
            {
                if ( !isSpace) ++counter;
                isSpace = true;
            }
            else
            {
                isSpace = false;
            }
        }
 
        return counter;
    }(str);
 
    std::cout << wordsCount << std::endl;
 
    // [ANTIWARNING] unused parameters: 'argc', 'argv'
    return 0; (void)argc;(void)argv;
}
5
Для закрытия данного окна нажмите <ВВОД>...
^A^C

Warning: Program '/usr/bin/qtcreator_process_stub' crashed.
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
11.06.2017, 10:09 16
типа так?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstring>
 
int main()
{
  char str[] = "Эта программа написана в Linux Ubuntu";
 
  std::cout << strstr (str, "Linux") << std::endl; // поиск подстроки в строке
  return 0;
}
0
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
11.06.2017, 10:10 17
C++
1
2
3
4
#include <boost/algorithm/string.hpp>
using namespace std;
    using namespace boost;
trim(str)
должно помочь
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
11.06.2017, 10:27 18
Цитата Сообщение от dailydose Посмотреть сообщение
у меня почему-то 5 выдаёт
на первой итерации isSpace == false, поэтому на первом же символе, т.к. он пробельный, counter увеличивается на 1.
лекарство: bool isSpace = isspace(str.front());.
1
11.06.2017, 10:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2017, 10:27
Помогаю со студенческими работами здесь

Определить количество слов в строке С++
Как в С++ определить количество слов строке при том, что словом называется только слово, состоящее...

Определить количество слов в строке
Как в С++ определить количество слов строке при том, что словом называется только слово, состоящее...

Определить количество слов в строке.
Здравствуйте,уважаемые форумчане. Имею следующую задачу: Введите с клавиатуры символьную строку и...

Определить количество слов в строке
Люди помогите пожалуйста бедной девушке... Дана строка текста, в которой слова разделены...


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

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