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

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

Войти
Регистрация
Восстановить пароль
 
DaStAn1996
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 19
#1

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

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

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

Выяснить является ли хоть одно из данных чисел палиндромом(перевёртышем) - C++
Даны 2 натуральных числа выяснить является ли хоть одно из них палиндромом(перевёртышем) тоесть таким числом десятичная запись которого...

Даны три слова. Определить, является ли хоть одно из них палиндромом - C++
Даны три слова. Определить, является ли хоть одно из них палиндромом ("перевёртышем"), т.е таким, которое читается одинаково слева направо...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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;
}
Ev[G]eN
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
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;
}
elivin
65 / 65 / 1
Регистрация: 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;
}
Ev[G]eN
12.12.2013, 17:13
  #5

Не по теме:

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

elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
12.12.2013, 17:15 #6
Ev[G]eN, это массив из 3-х строк
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
12.12.2013, 17:15 #7
не учите столь плохому. Немного поправил:
elivin, вы прям гений как это я сам не увидел, возьмите меня в ученики .
elivin
65 / 65 / 1
Регистрация: 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 копий пилить?
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
12.12.2013, 17:30 #9
Да благодаря вашей мастерской оптимизации программа стала намного лучше, одним слом эксперт куда там мне.
P.S. То что вы делаете называет выпендриваться.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
12.12.2013, 17:47 #10
egor2116, то, что я сделал, называется предостеречь автора темы (и тех, кто также ищет тут ответ) от изначально неверного подхода, осложняющего поддержку кода. Не стоит так бурно на это реагировать.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
13.12.2013, 09:51 #11
осложняющего поддержку кода
Для этого двухстрочного примера, хах ты юморной.
Все удачи.
bradobrei
13.12.2013, 11:30
  #12

Не по теме:

Пошла возьня

ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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;
   }
}
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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());
}
?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.12.2013, 13:13 #15
Dani, Ну почему не функция - потому что лямбда. А вот сравнение да, вполне логичное, мне просто хотелось вспомнить range.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 13:13
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.12.2013, 13:13
Ответ Создать тему
Опции темы

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