Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
DaStAn1996
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 19
#1

Выяснить, является ли хоть одно из трех слов палиндромом - C++

12.12.2013, 16:08. Просмотров 904. Ответов 14
Метки нет (Все метки)

32. Даны три слова. Выяснить, является ли хоть одно из них палиндромом («перевертышем»), т. е. таким, которое
читается одинаково слева направо и справа налево. (Определить функцию, позволяющую распознавать слова-палиндромы.)
http://www.cyberforum.ru/cpp-beginners/thread834825.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 16:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выяснить, является ли хоть одно из трех слов палиндромом (C++):

Даны три слова. Определить, является ли хоть одно из них палиндромом
Даны три слова. Определить, является ли хоть одно из них палиндромом...

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

Выяснить является ли палиндромом четырехзначное число.
Дано натуральное четырехзначное число. Выяснить, является ли оно палиндромом...

Цикл: выяснить, является ли число палиндромом
дано натуральное число. выяснить является ли оно палиндромом т.е числом...

Выяснить, является ли данное слово палиндромом(перевертышем)
Даны три слова. Выяснить, является ли оно палиндромом(перевертышем), т.е таким,...

14
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
12.12.2013, 17:00 #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
38
39
40
41
42
43
#include <iostream>
#include <string>
 
bool poly(std::string str)
{
     int k = str.size();
     for(int i = 0; i < str.size() / 2; ++i)
     {
       if(str[i] != str[k - 1]) return false;
       --k;
     }
     return true;
}
 
int main()
{
    std::string str1;
    std::string str2;
    std::string str3;
    
    std::cout << "Input string: "; std::cin >> str1;
    std::cout << "Input string: "; std::cin >> str2;
    std::cout << "Input string: "; std::cin >> str3;
    
    if(poly(str1))
      std::cout << "String 1 is polyndrom" << std::endl;
    else
      std::cout << "String 1 is not polyndrom" << std::endl; 
      
    if(poly(str2))
      std::cout << "String 2 is polyndrom" << std::endl;
    else
      std::cout << "String 2 is not polyndrom" << std::endl; 
      
    if(poly(str3))
      std::cout << "String 3 is polyndrom" << std::endl;
    else
      std::cout << "String 3 is not polyndrom" << std::endl; 
      
      system("PAUSE");
    
   return 0;
}
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5115 / 1553 / 950
Регистрация: 23.01.2011
Сообщений: 3,179
Завершенные тесты: 1
12.12.2013, 17:09 #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
#include <algorithm>
#include <iostream>
#include <string>
 
bool isPalindromeString(std::string userString);
 
int main()
{
    const size_t wordsCount(3);
    std::string userString;
    for (size_t i = 0; i < wordsCount; i++) {
        std::cout << std::endl << (i + 1) << " word: ";
        std::cin >> userString;
        std::cout << "Is palindrome? - " << std::boolalpha << isPalindromeString(userString) << std::endl;
    }
 
    std::system("pause");
    return 0;
}
 
bool isPalindromeString(std::string userString)
{
    std::string reverseString(userString);
    std::reverse(reverseString.begin(), reverseString.end());
    return userString == reverseString;
}
0
elivin
65 / 65 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
12.12.2013, 17:10 #4
egor2116, не учите столь плохому. Немного поправил:
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>
 
bool poly(std::string str)
{
     unsigned int k = str.length();
     for(unsigned int i = 0; i < str.length() / 2; ++i)
     {
       if(str[i] != str[k - 1]) return false;
       --k;
     }
     return true;
}
 
int main()
{
   const int CSTR = 3;
   std::string str[CSTR];
   
   for (int i = 0; i < CSTR; i++) {
      std::cout << "Input string: "; 
      std::cin >> str[i];
   }
   
   for (int i = 0; i < CSTR; i++)
      if(poly(str[i]))
         std::cout << "String " << i << " is polyndrom" << std::endl;
      else
         std::cout << "String " << i << " is not polyndrom" << std::endl;
   
   system("PAUSE");
   
   return 0;
}
0
Ev[G]eN
12.12.2013, 17:13
  #5

Не по теме:

протупил. прошу прощения

1
elivin
65 / 65 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
12.12.2013, 17:15 #6
Ev[G]eN, это массив из 3-х строк
0
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
12.12.2013, 17:15 #7
не учите столь плохому. Немного поправил:
elivin, вы прям гений как это я сам не увидел, возьмите меня в ученики .
0
elivin
65 / 65 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
12.12.2013, 17:26 #8
egor2116, к чему это? Вы не согласны, что повторяющийся код, а именно строки:
C++
1
std::cout << "Input string: "; std::cin >> str1;
и
C++
1
2
3
4
if(poly(str1))
      std::cout << "String 1 is polyndrom" << std::endl;
    else
      std::cout << "String 1 is not polyndrom" << std::endl;
стоит запихнуть в цикл, а не повторять по несколько раз? А представьте, ТЗ меняется и нужно проверить 10 строк, а не 3? Будете ещё по 7 копий пилить?
0
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
12.12.2013, 17:30 #9
Да благодаря вашей мастерской оптимизации программа стала намного лучше, одним слом эксперт куда там мне.
P.S. То что вы делаете называет выпендриваться.
0
elivin
65 / 65 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
12.12.2013, 17:47 #10
egor2116, то, что я сделал, называется предостеречь автора темы (и тех, кто также ищет тут ответ) от изначально неверного подхода, осложняющего поддержку кода. Не стоит так бурно на это реагировать.
0
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
13.12.2013, 09:51 #11
осложняющего поддержку кода
Для этого двухстрочного примера, хах ты юморной.
Все удачи.
0
bradobrei
13.12.2013, 11:30
  #12

Не по теме:

Пошла возьня

0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
13.12.2013, 12:40 #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm/equal.hpp>
 
int main()
{
   const size_t words = 3;
   auto is_poly = [](const std::string& value)
   {
      return boost::equal(boost::make_iterator_range(value.begin(), value.end()),
      value | boost::adaptors::reversed);
   };
   for (size_t i = 0; i < 3; ++i)
   {
      std::string word;
      std::cin >> word;
      std::cout << word << " is" << (is_poly(word) ? " " : " not ") << "poly" << std::endl;
   }
}
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
13.12.2013, 13:08 #14
ForEveR, а почему просто не
C++
1
2
3
4
bool isPoly(std::string& s)
{
    return std::equal(s.begin(), s.end(), s.rbegin());
}
?
1
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
13.12.2013, 13:13 #15
Dani, Ну почему не функция - потому что лямбда. А вот сравнение да, вполне логичное, мне просто хотелось вспомнить range.
1
13.12.2013, 13:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 13:13
Привет! Вот еще темы с решениями:

Найти хотя бы одно число, которое является палиндромом
Нужно найти хотя бы одно число, которое являеться полиндромом(Полиндром -...

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

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

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


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

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

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