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

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

Войти
Регистрация
Восстановить пароль
 
Nirvana
#1

Чётные слова в строке - C++

02.02.2011, 01:29. Просмотров 1347. Ответов 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
#include "StdAfx.h"
#include<conio.h>
#include <ctime>
#include <iostream> 
#include <math.h>
#include <string>
using namespace std;
 
 
int main()
 
 {   
     string b[10];
         string s;
     string slovo;
     int i,k;
     getline(cin,s);
     k=0;
     slovo="";
     for (i=0; i<s.size(); i++)
         if (s[i]!=' ') slovo=slovo+s[i];
         else if (slovo.size()%2==0)
         {   
             k++;
             b[k]=slovo;
             slovo = "";
         }
         
         for (i=1;i<=k; i++)
        cout<<b[i]<<"\n"; 
     getch();
     return 0;
 }
Программа почему-то выводит неправильные результат, подскажите где ошибка? С++ изучать начал недавно, так что пока не очень разбираюсь.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 01:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чётные слова в строке (C++):

Удалить из строки все чётные слова - C++
нужно удалить с строки все чётные слова. Не могу написать...:cry:

сортировать в массиве отдельно чётные и не чётные - C++
нужно отдельно сортировать числа стоящие на чётных и нечётных позициях получается в итоге вывод длинного числа -84........ помогите...

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

Как из строки удалить все нечетные слова, а все чётные вывести перевернутыми? - C++
Подскажите пожалуйста, я не понимаю, как удалить нечётные слова из строки. Возможно, кто-то сможет написать пример или скинуть статью где...

Вывести слова в строке ДО слова, у которого одинаковые первая и последняя буквы - C++
С клавиатуры вводится строка, надо вывести все слова до слова, у которого одинаковые первая и последняя буквы. Проблема в том, что я не...

Написать функцию, меняющую первую букву каждого слова в строке на номер слова - C++
Написать функцию, меняющую первую букву каждого слова в строке на номер слова. Продемонстрировать ее использование в программе. ...

5
sadok
14 / 14 / 0
Регистрация: 26.01.2011
Сообщений: 64
02.02.2011, 01:58 #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
#include<conio.h>
#include <ctime>
#include <iostream> 
#include <math.h>
#include <string>
using namespace std;
int main() 
 {   
         setlocale (LC_CTYPE, ".1251"); //для русского языка
         setlocale (LC_MONETARY, ".1251"); //для русского языка
         string str; // сюда введём строку
         string slova; // сюда слова которые чётные
         int i,k=1; //i -счётчик , k - равен 1,потому что когда будет найден следующий пробел(k станет равным 2,и мы будем записывать в slova пока не встретим пробел
         cout<<"Введите строку:";
         getline(cin,str);
         for (int i=0; i<str.size(); i++)
         switch(str[i]) //оператор развитления(условный оператор) похож на if ,только может проверять много параметров,тоесть чему равен елемент
         {
         case ' ':slova+=' ';k++;break;//если встретили пробел - повышаем k на единицу
         default:
             if((k %2)==0)slova+=str[i]; //  k %2 - проверка на кратность
             break; 
         }
          for(int i=0;i<slova.size();++i) 
              cout<<slova[i]<<' '; //выводим отфильтрованые только чётные слова
         _getch();
     return 0;
 }
программа работает по принцыпу пробелом,сколько находит,то и выводит =))) если поставиш больше одного пробела будет неправельно считать,если важно неучитывать пробелы перед словами,можно доработать код,что его весьма утяжелит
1
x1Mike7x
218 / 131 / 6
Регистрация: 06.11.2010
Сообщений: 234
02.02.2011, 02:02 #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
#include <iostream> 
#include <string>
 
using namespace std;
 
int main()
{   
    string b[10], s, slovo="";
    int i, k=0;
    getline(cin, s);
    for (i=0; i<=s.size(); i++)
        //Условие (s[i]!=' ') не совсем верное, ведь могут же еще быть точки, запятые и т.д.
        //Проверяем на принадлежание символа к латиннице
        if (isalpha(s[i])) 
            slovo += s[i];
        else if (slovo.size()%2==0)
        {   
            b[k] = slovo;
            k++;
            slovo = "";
        }
        else
            slovo = "";  // не забываем обнулить строку если условие чётности не получилось     
    for (i=0; i<k; i++)
        cout<<b[i]<<"\n"; 
    system("pause");
    return 0;
}
1
sadok
14 / 14 / 0
Регистрация: 26.01.2011
Сообщений: 64
02.02.2011, 02:07 #4
Цитата Сообщение от Nirvana Посмотреть сообщение
if (slovo.size()%2==0)
что етим ты хотел проверить?
функция size,возвращает количество елементов,тоесть количество в строке _слово_ и ты его проверяеш на кратность 2-м ?))

Добавлено через 2 минуты
ооооо,нужно было найти слова количество букв которых чётное?))) а я все чётные слова по счёту думал =))))))))
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.02.2011, 02:35 #5
описывайте задание более точно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//чётные слова в строке
#include <iostream>
#include <sstream>
#include <algorithm>
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::string tmp;
    std::istringstream ss(str);
    int words = 1 + (int)std::count_if(str.begin(), str.end(), [](char c) { return c == ' '; });
    for( int i = 1; i <= words; i++ )
    {
    ss >> tmp;
    if( !(i % 2) ) std::cout << tmp << std::endl;
    }
    std::cin.get();
    std::cin.get();
    return 0;
}
Добавлено через 16 минут
Цитата Сообщение от sadok Посмотреть сообщение
слова количество букв которых чётное
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <sstream>
#include <algorithm>
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::string tmp;
    std::istringstream ss(str);
    int words = 1 + (int)std::count_if(str.begin(), str.end(), [](char c) { return c == ' '; });
    for( int i = 1; i <= words; i++ )
    {
        ss >> tmp;
        if( !(tmp.size() % 2) ) std::cout << tmp << std::endl;
    }
    std::cin.get();
    std::cin.get();
    return 0;
}
1
Nirvana
02.02.2011, 14:21 #6
Всем спасибо! Разобрался.
02.02.2011, 14:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2011, 14:21
Привет! Вот еще темы с ответами:

Написать функцию, меняющую первую букву каждого слова в строке на номер слова. - C++
Написать функцию, меняющую первую букву каждого слова в строке на номер слова. Продемонстрировать ее использование в программе.

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

Выяснить, есть ли в заданной строке слова, которые содержат все буквы слова "read" - C++
Помогите, пожалуйста, с кодом на с++. Задание было такое: Дано строку символов. Выяснить, есть ли в ней слова, которые содержат все...

Напечатать только те слова, перед которыми в строке находятся только меньшие (по алфавиту) слова - C++
Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв. Между соседними словами стоит запятая,...


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

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

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