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

Слова-палиндромы в тексте - C++

Восстановить пароль Регистрация
 
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
02.03.2013, 00:43     Слова-палиндромы в тексте #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
34
#include <iostream>
#include <cstring>
#include <conio.h>
 
using namespace std;
int main()
{   int i;
    i=0;
     char str[100];
     gets(str);
     char* s = strtok(str,",.?!;: ");
     
     do{
    
        bool flag = true;
       for (int i=0; i<strlen(s)/2; i++)
              if (s[i]!=s[strlen(s)-i-1])
                  {
                        flag=false;
                        break;
                }
       if (flag) 
       {
        cout<<"ALL WORD-PALINDROMES IN TEXT"<<endl;
        cout<<s<<endl;  
        
       }
    
    } while (s=strtok(NULL,",.?!;: "));
      
     getch();
     return 0;
}
}
Проблема в этой строчке
C++
1
2
3
4
  if (flag) 
       {
        cout<<"ALL WORD-PALINDROMES IN TEXT"<<endl;
        cout<<s<<endl;
очевидно, если будет два слова палиндрома, то он выведет
ALL WORD-PALINDROMES IN TEXT
слово1
ALL WORD-PALINDROMES IN TEXT
слово2

Ведь это все в цикле, как этого избежать?) Никак не пойму
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
02.03.2013, 00:55     Слова-палиндромы в тексте #2
Классическая олимпиадная задача... Предлагаю использовать std::string в этом классе реализованна функция reverse();
Можешь сравнивать:
C++
1
2
3
4
5
std::string ss("helleh");
if (ss == ss.reverse())
{
     std::cout << "Esli ya ne obezumel vse verno" << std::endl;
}
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
02.03.2013, 01:04     Слова-палиндромы в тексте #3
Можно добавить ещё один флаг перед циклом,который сначала будет true,а после первого вывода "ALL WORD-PALINDROMES IN TEXT" изменится на false и больше эта строка не выведется,то есть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool flag2=true;
     do{
        
        bool flag = true;
       for (int i=0; i<strlen(s)/2; i++)
              if (s[i]!=s[strlen(s)-i-1])
                  {
                        flag=false;
                        break;
                }
              
      if (flag) 
       {
           if (flag2==true)
        cout<<"ALL WORD-PALINDROMES IN TEXT"<<endl;
           flag2=false;
        cout<<s<<endl;  
        
       }
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
02.03.2013, 03:31  [ТС]     Слова-палиндромы в тексте #4
vbloodv, Не пойдет Все же это лаба, и там есть требования )

Добавлено через 51 минуту
SKS-65, К сожалению все равно выводит два раза)

Добавлено через 1 час 32 минуты
SKS-65, Подправил, все норм)
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
02.03.2013, 11:02     Слова-палиндромы в тексте #5
Цитата Сообщение от knf Посмотреть сообщение
Не пойдет Все же это лаба, и там есть требования )
Наверное ты прав, но ты используешь #include <cstring> и #include <iostream> я бы смог преподавателю обьяснить что мол стандарт
Yandex
Объявления
02.03.2013, 11:02     Слова-палиндромы в тексте
Ответ Создать тему
Опции темы

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