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

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

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

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

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

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

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

17
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
07.06.2017, 22:33
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
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
07.06.2017, 22:44
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  [ТС]
мне нужно сделать без использывания библиотек vector string и algorithm
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
08.06.2017, 03:22
Fixer_84, у вас переменная k не инициализирована. Стандарт не дает гарантии, что k будет равняться 0.
anapshy, так будет правильнее: unsigned int NumberWords(const std::string &line)
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
08.06.2017, 08:22
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
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
08.06.2017, 08:36
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
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
08.06.2017, 09:01
Цитата Сообщение от Nemovok Посмотреть сообщение
(const std::string &line)
И... А если человек не хочет, чтоб исходный текст изменялся?
0
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
08.06.2017, 09:04
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
Цитата Сообщение от anapshy Посмотреть сообщение
И... А если человек не хочет, чтоб исходный текст изменялся?
Вы все равно передаете по константной ссылке. И ваш код не меняет содержимое строки.
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
08.06.2017, 13:03
Nemovok, а ну Да, там же const
0
1 / 1 / 0
Регистрация: 10.05.2017
Сообщений: 19
10.06.2017, 19:16  [ТС]
А как ещё можно сделать
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
10.06.2017, 19:19
datanyan, куда ещё больше то?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
11.06.2017, 09:38
Лучший ответ Сообщение было отмечено 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
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
11.06.2017, 10:06
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
типа так?
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
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
11.06.2017, 10:10
C++
1
2
3
4
#include <boost/algorithm/string.hpp>
using namespace std;
    using namespace boost;
trim(str)
должно помочь
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
11.06.2017, 10:27
Цитата Сообщение от dailydose Посмотреть сообщение
у меня почему-то 5 выдаёт
на первой итерации isSpace == false, поэтому на первом же символе, т.к. он пробельный, counter увеличивается на 1.
лекарство: bool isSpace = isspace(str.front());.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2017, 10:27
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru