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

Определить количество слов, начинаются и заканчиваются одной и той же буквой

23.01.2014, 03:20. Показов 10328. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими).

Определить количество слов, начинаются и заканчиваются одной и той же буквой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2014, 03:20
Ответы с готовыми решениями:

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

Определить количество слов, которые начинаются и заканчиваются одной той же буквой
Помогите пожалуйста решить задачи 3. Дана строка, состоящая из слов, разделенных пробелами(одним)....

Найти количество слов, которые начинаются и заканчиваются одной и той же буквой
Проблема(

Списки: подсчитать количество слов, которые начинаются и заканчиваются одной и той же буквой
Дан массив типа char, состоящий из 10 слов. Нужно описать функцию, подсчитывающую количество слов,...

22
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
23.01.2014, 04:18 2
Не знаю, есть ли в С++ обычном регулярные выражения, но, вообще, с ними проще всего это сделать.

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

Добавлено через 4 минуты

Не по теме:

У тебя что там курсач или самоэкзамен? :)

0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
23.01.2014, 04:20 3
Iren1,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include<sstream>
#include<string>
 int main()
{
    std::string str;
    std::getline(std::cin,str);
    std::stringstream ss(str);
    size_t CountWord(0);
    for(std::string word;ss>>word;)
        if(word.begin() == word.end() - 1)
            CountWord++;
    std::cout<<"Number of words:"<<CountWord;
}
2
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
23.01.2014, 04:39 4
Как вариант:
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
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
 
int main(){
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
char str[] = " страус страусу   око   не вылечит ";
 
char seps[]   = " ,.!?\t\n";//добавьте или уберите что захотите, можно оставить " "(пробел)
 
char *token ;
int str_count=0;
char* currentStr=0;
int lenWord=0;
int count_equal=0;
token = strtok( str, seps );
 
while( token != NULL )
   {
cout<<token<<endl;  
lenWord=strlen(token);
if(token[0] == token[lenWord-1]){
cout<<"found "<<token<<endl; 
    count_equal++;
}
      token = strtok( NULL, seps ); 
   }
 
cout<<"Найдено "<<count_equal<<" слов(а)";
 
cout<<endl;
system("pause");
return 0;
}
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 11:35  [ТС] 5
Цитата Сообщение от contedevel Посмотреть сообщение
Добавлено через 4 минуты

Не по теме:

У тебя что там курсач или самоэкзамен? :)

у меня погружение в мир программирования.... спасибо вам))

Добавлено через 6 минут
а как сделать, чтобы строчку можно было вводить самостоятельно с клавиатуры?

Добавлено через 45 секунд
и у меня чет русские буквы иероглифами отображаются(((
0
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
23.01.2014, 11:39 6
Цитата Сообщение от Iren1 Посмотреть сообщение
а как сделать, чтобы строчку можно было вводить самостоятельно с клавиатуры?
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
char str[] = " страус страусу * око * не вылечит ";
C++
1
2
char str[256];
gets(str);
Цитата Сообщение от Iren1 Посмотреть сообщение
и у меня чет русские буквы иероглифами отображаются(((
Русские шрифты в консоли
1
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 11:42  [ТС] 7
я вставила такую строку
C
1
2
3
4
char str[10];
 
printf("vvedit stroky sumvoliv: ");
gets(str);
вместо
C
1
 char str[] = " страус страусу   око   не вылечит ";
оно запускаеться.. а когда закрываешь программу(черненькое окошко))) оно предлагает брейк , и еще какую то бяку...

и как сделать, чтобы в конце.. когда он пишет..найдено слово..столько то..чтобы оно его еще вывело на экран?
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
23.01.2014, 11:46 8
cooller_94, малость подправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include<sstream>
#include<string>
 int main()
{
    std::string str;
    std::getline(std::cin,str);
    std::stringstream ss(str);
    size_t CountWord(0);
    for(std::string word;ss>>word;)
        if(*(word.begin()) == *(word.end() - 1)
            && (word.begin() != word.end() - 1))
            CountWord++;
    std::cout<<"Number of words:"<<CountWord;
}
1
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
23.01.2014, 11:48 9
Цитата Сообщение от Iren1 Посмотреть сообщение
и как сделать, чтобы в конце.. когда он пишет..найдено слово..столько то..чтобы оно его еще вывело на экран?
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
#include <Windows.h>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    std::string userString;
    std::cout << "Введите строку: " << std::endl;
    std::getline(std::cin, userString);
 
    std::string currentWord;
    std::stringstream stream(userString);
    std::vector <std::string> resultWords;
    while (stream >> currentWord) {
        if (currentWord.front() == currentWord.back()) {
            resultWords.push_back(currentWord);
        }
    }
    std::cout << "Количество слов: " << resultWords.size() << std::endl;
    std::cout << "Слова: ";
    std::copy(resultWords.begin(), resultWords.end(), std::ostream_iterator <std::string> (std::cout, " "));
    std::cout << std::endl;
    
    std::system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 11:52  [ТС] 10
последний код 2 ошибки выбивает((
0
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
23.01.2014, 11:53 11
Iren1, целесообразно их сюда скопировать
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 11:56  [ТС] 12
а что эта строка делает?
C
1
 char seps[]   = " ,.!?\t\n";//добавьте или уберите что захотите, можно оставить " "(пробел)
Добавлено через 1 минуту
Код
1>d:\work\fg\g.cpp(22) : error C2039: 'back' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>
1>        ]
1>Build log was saved at "file://d:\Work\fg\Debug\BuildLog.htm"
1>fg - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
23.01.2014, 12:00 13
Цитата Сообщение от Iren1 Посмотреть сообщение
последний код 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
29
30
31
32
33
34
35
36
37
#include <Windows.h>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    std::string userString;
    std::cout << "Введите строку: " << std::endl;
    std::getline(std::cin, userString);
 
    std::string currentWord;
    std::stringstream stream(userString);
    std::vector <std::string> resultWords;
    size_t CountWord(0);
    while (stream >> currentWord) {
        if(*(currentWord.begin()) == *(currentWord.end() - 1)
            && (currentWord.begin() != currentWord.end() - 1)) {
            resultWords.push_back(currentWord);
            CountWord++;
        }
    }
 
    std::cout << "Количество слов: " << resultWords.size() << std::endl;
    std::cout << "Слова: ";
    std::copy(resultWords.begin(), resultWords.end(), std::ostream_iterator <std::string> (std::cout, " "));
    std::cout << std::endl;
 
    std::system("pause");
    return 0;
}
0
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
23.01.2014, 12:03 14
Цитата Сообщение от Iren1 Посмотреть сообщение
а что эта строка делает?
C
1
char seps[] * = " ,.!?\t\n";//добавьте или уберите что захотите, можно оставить " "(пробел)
это символы-разделители, по которым разбивается ваша исходная строка
по поводу ошибки, попробуйте замените у меня в программе вот эту часть кода:
C++
1
2
3
4
5
    while (stream >> currentWord) {
        if (*currentWord.begin() == *(currentWord.end() - 1)) {
            resultWords.push_back(currentWord);
        }
    }
Добавлено через 2 минуты
Ilot, раз уж взялись поправлять, то убрали бы лишнее
Цитата Сообщение от Ilot Посмотреть сообщение
C++
1
size_t CountWord(0);
Цитата Сообщение от Ilot Посмотреть сообщение
C++
1
CountWord++;
1
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 12:06  [ТС] 15
ладно.. смотрите..я пытаюсь переделать этот код
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
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
 
int main()
{
  
    setlocale(LC_ALL,"Russian");
 
char str[256];
cout << "Введите строку: ";
gets(str);
 
char seps[]   = " ,.!?\t\n";//добавьте или уберите что захотите, можно оставить " "(пробел)
 
char *token ;
int str_count=0;
char* currentStr=0;
int lenWord=0;
int count_equal=0;
token = strtok( str, seps );
 
while( token != NULL )
   {
cout<<token<<endl;  
lenWord=strlen(token);
if(token[0] == token[lenWord-1]){
cout<<"found "<<token<<endl; 
    count_equal++;
}
      token = strtok( NULL, seps ); 
   }
 
cout<<"Найдено "<<count_equal<<" слов(а)";
 
cout<<endl;
system("pause");
return 0;
}
в итоге..выводит на экран..рус буквами.. введите строку..нормально пишет данную строку русс.буквами.. и строчку найдено слов...

а от сами слова дальше которые он выводит с новой сроки отдельно..выводит иероглифами((

Добавлено через 1 минуту
не ругайтесь! я за вашими мыслями не успеваю..
0
Ilot
23.01.2014, 12:06
  #16

Не по теме:

Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Ilot, раз уж взялись поправлять, то убрали бы лишнее
Ладно, ладно не заметил. Зачем сразу нервничать?:)

0
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
23.01.2014, 12:10 17
Ilot, спокоен как двери
Цитата Сообщение от Iren1 Посмотреть сообщение
а от сами слова дальше которые он выводит с новой сроки отдельно..выводит иероглифами((
поменяйте
Цитата Сообщение от Iren1 Посмотреть сообщение
C++
1
setlocale(LC_ALL,"Russian");
на
C++
1
2
    SetConsoleCP(1251);
SetConsoleOutputCP(1251);
и подключить не забудьте
C++
1
#include <Windows.h>
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 12:16  [ТС] 18
сделала так.. вообще все иероглифами выдает((
0
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
23.01.2014, 12:17 19
Iren1, в свойствах консольного окна поменяйте шрифт на Lucida Console
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 91
23.01.2014, 12:19  [ТС] 20
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Iren1, в свойствах консольного окна поменяйте шрифт на Lucida Console
а это где?)))
0
23.01.2014, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2014, 12:19
Помогаю со студенческими работами здесь

Подсчитать количество слов списка, которые начинаются и заканчиваются одной и той же буквой
Как написать программу с функциями, которая подсчитывает количество слов списка Р, которые:...

Найти те слова, которые начинаются и заканчиваются одной и той же буквой
1_Символьная строка заканчивается восклицательным знаком (!). Слова в ней отделены друг от друга...

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

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


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

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