1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
1

Проверить, является ли введенная строка палиндромом

08.01.2014, 20:52. Показов 4693. Ответов 14
Метки нет (Все метки)

Написать программу, которая проверяет, является ли введенная строка палиндро-
мом
"А роза упала на лапу азора" - выводит что не палиндром

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
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
#include <string>
#include<math.h>
#include<windows.h>
#include<string.h>
#include<stdio.h>
#include <ctype.h>
 
using namespace std;
 
char bufRus[256];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
char* deleted(char a[40]);
int palindrom(char a[40]);
 
int main()
{
    char s[40];
    cin.getline(s,40);
    cout << '\n';
    cout<<deleted(s);
    cout << '\n';
    if (palindrom(s)==0) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
 
    return 0;
}
char* deleted(char a[40])
{
     int n=strlen(a),t=0,p=0;
    for (int i=0;i<n;i++)
    if (a[i]==' '|| a[i]==',' || a[i]=='.' ) {t=t+1;
      for (int j=i;j<n;j++)
       a[j]=a[j+1];}
    a[n-t]='\0';
    for (int i=0;i<n;i++)
    if (a[i]==' '|| a[i]==',' || a[i]=='.' ) t=1;
    if (t==1)
        return deleted(a);
    else return a;
}
int palindrom(char a[40])
{
    int p=0;
    char b[40];
    for (int k=0;k<strlen(a);k++)
    b[k]=a[strlen(a)-k-1];
    for (int f=0;f<strlen(a);f++)
    if (a[f]!=b[f]) p=p+1;
    return p;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2014, 20:52
Ответы с готовыми решениями:

Проверить является ли введенная строка палиндромом
Объясните как это работает , желательно с комментариями возле кода #include&quot;stdio.h&quot; ...

Проверить, является ли строка, введённая с клавиатуры, палиндромом
ЗАдание следующее: Написать программу, которая проверяет, является ли строка, введённая с...

Определить, является ли введённая с клавиатуры строка палиндромом
Определить, является ли введённая с клавиатуры строка палиндромом - выполнить тремя способами:...

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

14
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.01.2014, 15:56 2
Не углубляясь в кривизку реализации, могу предположить, что дело в заглавной "А" в начале.
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
09.01.2014, 16:45 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
29
30
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
 
bool is_palindrome(const std::string &str)
{
    return std::equal(str.begin(), std::next(str.begin(), str.size()/2), str.rbegin());
}
 
int main()
{
    std::string tests[] = {
        "abcba",
        "abccba",
        "abccb",
        "a",
        "aa"
    };
    for (const std::string &str : tests)
    {
        std::cout << str << ": " << std::boolalpha << is_palindrome(str) << "\n";
    }
 
    std::string str;
    while (std::cin >> str)
    {
        std::cout << str << ": " << std::boolalpha << is_palindrome(str) << "\n";
    }
}
Добавлено через 2 минуты
Troo, Tulosba, так сойдет? (:

Добавлено через 4 минуты
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
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
 
bool is_palindrome(const std::string &str)
{
    return std::equal(str.begin(), std::next(str.begin(), str.size()/2), str.rbegin());
}
 
void check(const std::string &str)
{
    std::cout << "Test [" << str << "]: " << std::boolalpha << is_palindrome(str) << "\n";
}
 
int main()
{
    std::string tests[] = {
        "abcba",
        "abccba",
        "abccb",
        "a",
        "aa"
    };
 
    std::for_each(std::begin(tests), std::end(tests), check);
 
    typedef std::istream_iterator<std::string> in;
    std::for_each(in(std::cin), in(), check);
}
Хотел сделать короче, а вышло также (:
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.01.2014, 16:49 4
Цитата Сообщение от outoftime Посмотреть сообщение
так сойдет?
Сошло бы. Но исходную проблему с регистром не решает
0
Evg
Эксперт CАвтор FAQ
21248 / 8263 / 637
Регистрация: 30.03.2009
Сообщений: 22,608
Записей в блоге: 30
09.01.2014, 16:52 5
outoftime, фраза "a bcba" является палиндромом, но, судя по всему, твоя программа скажет, что нет
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
09.01.2014, 18:25 6
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
#include <iostream>
#include <string>
#include <algorithm>
#include <utility>
#include <iterator>
#include <locale>
 
bool is_palindrome(const std::string &str)
{
    return str.size()
        ? std::equal(str.begin(), std::next(str.begin(), str.size()/2), str.rbegin())
        : false;
}
 
void check(const std::string &str)
{
    std::string res;
    std::locale loc;
    using namespace std::placeholders;
    std::copy_if(str.begin(), str.end(), std::back_inserter(res),
                 std::bind(std::not2(std::equal_to<char>()), _1, ' '));
    std::transform(res.begin(), res.end(), res.begin(), std::bind(std::tolower<char>, _1, loc));
    std::cout << "Test [" << str << "]: " << std::boolalpha << is_palindrome(res) << "\n";
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::string tests[] = {
        "А роза упала на лопу азора"
    };
 
    std::for_each(std::begin(tests), std::end(tests), check);
 
    std::string str;
    while (std::getline(std::cin, str)) check(str);
}
Tulosba, Evg, Ппц, std::tolower не могу заставить с русским работать.

Добавлено через 8 минут
http://www.monkeycoder.co.nz/C... topic=7631 тут чувак разобрался как заставить std::tolower работать с русской локалью.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.01.2014, 18:36 7
Цитата Сообщение от outoftime Посмотреть сообщение
не могу заставить с русским работать
Проблема еще может крыться в отсутствии необходимой локали.
0
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
09.01.2014, 18:52 8
Не проще-ли воспользоваться стеком? Сначала посимвольно вбить туда фразу, а затем вывести её.
0
Evg
Эксперт CАвтор FAQ
21248 / 8263 / 637
Регистрация: 30.03.2009
Сообщений: 22,608
Записей в блоге: 30
09.01.2014, 19:58 9
Цитата Сообщение от Arkaniy Посмотреть сообщение
Сначала посимвольно вбить туда фразу, а затем вывести её
Так ведь задача вовсе не в этом

У афтора уже есть готовое решение (видимо, кто-то ему его выдал). Он всего лишь не может решить проблему со строчными/прописными буквами

Вариант из поста #6 является стандартным монстром, родившимся в write-only языках. Смысл школьных задач в том и состоит, чтобы самому всё реализовать, а не использовать трёхэтажные конструкции из шаблонов, в которых без поллитра ничего прочитать невозможно
1
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
09.01.2014, 20:40  [ТС] 10
Спасибо все, за я поняла что смысл с заглавной буквой "А", поняла как реализовать)
0
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
09.01.2014, 20:42 11

Не по теме:

У меня без трёхэтажных конструкций :-[


Сначала нужно изменить кодировку на ср1251
C++
1
system("chcp 1251");
После этого русские буквы будут лежать в таком диапазоне
Код
-32 - а     -64 - А
-1  - я     -33 - Я
проверять каждую букву и, если входит в диапазон заглавных букв, то прибавлять 32.
Только буква "ё" лежит под другим номером. Остальные подходят под этот приём.
1
Evg
Эксперт CАвтор FAQ
21248 / 8263 / 637
Регистрация: 30.03.2009
Сообщений: 22,608
Записей в блоге: 30
09.01.2014, 21:10 12
Цитата Сообщение от Arkaniy Посмотреть сообщение
У меня без трёхэтажных конструкций
Так пост #6 не ты писал

Цитата Сообщение от Arkaniy Посмотреть сообщение
После этого русские буквы будут лежать в таком диапазоне
Зачем? Ведь всё уже украдено до нас: tolower, toupper, которые умеют работать в том числе и с учётом локали
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
09.01.2014, 22:15 13
Цитата Сообщение от Evg Посмотреть сообщение
трёхэтажные конструкции из шаблонов, в которых без поллитра ничего прочитать невозможно
Можете привести мой код к читабельному виду?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.01.2014, 22:32 14
Цитата Сообщение от outoftime Посмотреть сообщение
Можете привести мой код к читабельному виду?
По сути, это будет просто разворачивание stl-ных функций. В первом приближении.
0
Evg
Эксперт CАвтор FAQ
21248 / 8263 / 637
Регистрация: 30.03.2009
Сообщений: 22,608
Записей в блоге: 30
10.01.2014, 12:33 15
Цитата Сообщение от outoftime Посмотреть сообщение
Можете привести мой код к читабельному виду?
Зачем? Вместо приведения к читабельному виду я бы просто написал без этих монстров. Задача простая, школьного уровня. Преподавателю (да и учащемуся) интересно решение, написанное СВОИМИ руками, а не чужими инструментами

Добавлено через 3 минуты
По смыслу что-то типа этого: Какой язык лучше учить?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2014, 12:33
Помогаю со студенческими работами здесь

Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. Не могу...

Используя стек, определить, является ли введённая с клавиатуры строка палиндромом
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru