Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Nirvana
Сообщений: n/a
02.02.2011, 01:29     Чётные слова в строке #1
Ввести строку. На экран вывести все чётные слова.


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++
C++ нужно удалить с строки все чётные слова
C++ В заданной строке выбрать те слова,в которых первая буква этого слова встречается еще хоть один раз
сортировать в массиве отдельно чётные и не чётные C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
 }
программа работает по принцыпу пробелом,сколько находит,то и выводит =))) если поставиш больше одного пробела будет неправельно считать,если важно неучитывать пробелы перед словами,можно доработать код,что его весьма утяжелит
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 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;
}
sadok
14 / 14 / 0
Регистрация: 26.01.2011
Сообщений: 64
02.02.2011, 02:07     Чётные слова в строке #4
Цитата Сообщение от Nirvana Посмотреть сообщение
if (slovo.size()%2==0)
что етим ты хотел проверить?
функция size,возвращает количество елементов,тоесть количество в строке _слово_ и ты его проверяеш на кратность 2-м ?))

Добавлено через 2 минуты
ооооо,нужно было найти слова количество букв которых чётное?))) а я все чётные слова по счёту думал =))))))))
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 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;
}
Nirvana
Сообщений: n/a
02.02.2011, 14:21     Чётные слова в строке #6
Всем спасибо! Разобрался.
Yandex
Объявления
02.02.2011, 14:21     Чётные слова в строке
Ответ Создать тему
Опции темы

Текущее время: 13:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru