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

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

Войти
Регистрация
Восстановить пароль
 
 
T-killer
1 / 1 / 0
Регистрация: 02.05.2012
Сообщений: 18
#1

По данной строке, определите, является ли она палиндромом - C++

20.02.2013, 06:34. Просмотров 1724. Ответов 27
Метки нет (Все метки)

По данной строке, определите, является ли она палиндромом. В принципе задача мне понятна, только с кодом проблемы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<conio.h>
#include<cstring>
 
using namespace std;
 
char a[100], b[100], c[100];
 
int main()
{
    cin >> a;
    strcpy(c,a);
    strrev(a);
    strcpy(b,a);
    if (b==c) {cout<<"eto palindrom";}
    else    {cout<<"eto ne palindrom";}
    getch ();
    return 0;
}
вроде понятно, вводимую строку реверсирую и сравниваю с исходной строкой, а она не сравнивается. Как это сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 06:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос По данной строке, определите, является ли она палиндромом (C++):

Дана строка символов. Является ли заданная она палиндромом - C++
Пожалуйста,Помогите разобраться с ректорской к.р.! Вот есть задание: Дана строка символов. Создать функцию, чтобы проверить,...

Как зделать чтобы входная строка, если она не палиндром, делалась палиндромом, т.е. к строке добавлялись недостающие символы? - C++
Как зделать чтобы входная строка, если она не палиндром, делалась палиндромом, т.е. к строке добавлялись недостающие символы?

Определите, есть ли в данной строке указанное слово - C++
Ну, не стал напрягаться, и взял такое предложение - Определите есть ли в данной строке указанное слово. А слово, пусть - &quot;слово&quot; ...

Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н - C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо...

С клавиатуры вводится исходная строка. Если в строке имеются цифры, то она является зашифрованной - C++
С клавиатуры вводится исходная строка. Если в строке имеются цифры, то она является зашифрованной. Если исходная строка не содержит...

Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени - C++
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени / С++ для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.02.2013, 06:39 #2
Посимвольно.
В цикле от 0 до середины строки проверяете элементы на равнозначность (с начала и конца строки).
И не нужно ничего реверсировать.

То, что делаете Вы, это не сравнение строк.
1
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
20.02.2013, 09:03 #3
Уж коли используете STL, то замените
char a[100], b[100], c[100];
на
string a,b,c;
и тогда строки можно сравнивать как в Вашем примере.
0
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
20.02.2013, 09:45 #4
Цитата Сообщение от T-killer Посмотреть сообщение
if (b==c)
это сравнение адресов двух массивов. Нужно использовать strcmp

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
#include <cstdio>
 
int main()
{
    const size_t len = 100;
    char a[len];
    char b[len];
    std::cout << ">>";
    gets_s(a);
    strcpy(b, a);
    strrev(b);
    std::cout << (strcmp(a, b) == 0 ? "eto palindrom" : "eto ne palindrom") << std::endl;
    return 0;
}
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.02.2013, 09:51 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
#include <boost/algorithm/string.hpp>
#include <boost/range/adaptor/reversed.hpp>
 
bool is_pal(const std::string& s1, const std::string& s2)
{
   return boost::equals(boost::to_lower_copy(boost::erase_all_copy(s1, " ")),
         boost::to_lower_copy(boost::erase_all_copy(s2, " ")) | boost::adaptors::reversed);
}
 
int main()
{
   const std::string s1 = "hello and what", s2 = "tahwdna olleh";
   const std::string s3 = "this is", s4 = "is this";
   std::cout << is_pal(s1, s2) << " " << is_pal(s3, s4) << std::endl;
}
http://www.worldoflogs.com/reports/0...?s=5828&e=6319
0
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
20.02.2013, 10:57 #6
По идее так будет быстрее (т.к. строки не переворачиваются, а сразу смотрим, палиндром или нет), и памяти занимает меньше
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>
 
using namespace std;
 
int main()
{
bool palind=true;
string a;
cout << ">>";
getline(cin, a);
int len = a.length();
for (int i=0; i<len/2; i++)
    if (a[i]!=a[len-i-1]) {palind=false; break;}
 
cout << (palind ? "eto palindrom" : "eto ne palindrom") << endl;
 
system("pause");
return 0;
}
0
Qitelery
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 28
12.07.2017, 17:31 #7
Здравствуйте! Пожалуйста помогите починить код. Условие задачи следующее (в принципе в начале темы сказано):
По данной строке определите, является ли она палиндромом (то есть, читается одинаково как слева-направо, так и справа-налево).
Входные данные

На вход подается 1 строка без пробелов.
Выходные данные

Необходимо вывести yes, если строка является палиндромом, и no в противном случае.


Вот код:
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
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
    int j, i; 
    bool k;
      string s, p; // две строки s - для ввода строки, p - для той же строки, но элементы которой будут расставлены в обратном порядке
        getline (cin, s);
        for (i = s.size() - 1, j = 0; i >= 0; i--, j++){
            p[j] = s[i]; // забиваем строку, в которой элементы будут стоять в обратном порядке относительно оригинальной
        }
        for (i = 0; i < p.size(); i++){
            if (s[i] != p[i]){ // сравниваем оригинальную строку и "обратную"
                k = false;
                break;
            }
        }    
    if (k){
        cout << "yes";
    }else{
        cout << "no";
    }
  return 0;
}
Я его запускал на ideone и получилось так, что не выполняются циклы. Может я неправильно определяю длину строки или неправильно задаю типы переменных, используемых в качестве строк. Пожалуйста подскажите что не так.
0
GbaLog-
Любитель чаепитий
2769 / 1291 / 311
Регистрация: 24.08.2014
Сообщений: 4,579
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 19:15 #8
легкий способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
 
const char * getAnswer(const std::string & s)
{
    return std::equal(s.cbegin(), s.cbegin() + s.size() / 2, s.crbegin()) ? "yes" : "no";
}
 
int main()
{
    std::string s;
    
    std::cin >> s;
    
    std::cout << getAnswer(s) << "\n";
}
ваш способ:
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
#include <iostream>
#include <string>
using namespace std;
 
bool isPalindrom(const std::string & s)
{
    for (std::size_t i = 0, j = s.size() - 1; i <= j; ++i, --j)
    {
        if (s[i] != s[j])
            return false;
    }
    return true;
}
 
int main() {
      string s;
        getline (cin, s);
        
    if (isPalindrom(s)){
        cout << "yes";
    }else{
        cout << "no";
    }
  return 0;
}
1
повар1
72 / 51 / 21
Регистрация: 24.02.2017
Сообщений: 213
Завершенные тесты: 1
12.07.2017, 20:37 #9
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
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stack.h>
 
int main() {
 
char a;
string s="";
stack <char> t;
 
   for(;;)
   {
    a=getch();
    if(a==13)break;
    cout<<a;
    s+=a;
    t.push(a);
    }
 
   int i=0,flag=0;
   while(s[i]!='\0')
   {
      if(t.top()!=s[i++])
      {
      cout<<"ne polindrom";
      flag++;
      break;
      }
      t.pop();
    }
 
     if(flag==0)
     cout<<"\npolindrom";
 
    system("pause>NULL");
    return 0;
}
0
GbaLog-
Любитель чаепитий
2769 / 1291 / 311
Регистрация: 24.08.2014
Сообщений: 4,579
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 20:45 #10
повар1, этот код не скомпилируется ни на одном нормальном компиляторе.
0
повар1
72 / 51 / 21
Регистрация: 24.02.2017
Сообщений: 213
Завершенные тесты: 1
12.07.2017, 20:54 #11
GbaLog-, У нас запретили на жигулях ездить?
0
GbaLog-
Любитель чаепитий
2769 / 1291 / 311
Регистрация: 24.08.2014
Сообщений: 4,579
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 21:00 #12
Цитата Сообщение от повар1 Посмотреть сообщение
У нас запретили на жигулях ездить?
а причем тут жигули?
жигули нормальная тачка, заводится, ездит, пускай и старая.
ваша тачка даже не заведется.
я сказал "нормальный", а не "новый".
0
повар1
72 / 51 / 21
Регистрация: 24.02.2017
Сообщений: 213
Завершенные тесты: 1
12.07.2017, 21:17 #13
GbaLog-, однако заводится.
0
GbaLog-
Любитель чаепитий
2769 / 1291 / 311
Регистрация: 24.08.2014
Сообщений: 4,579
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 21:25 #14
Цитата Сообщение от повар1 Посмотреть сообщение
однако заводится.
ага, только этого никто не видел.
0
повар1
72 / 51 / 21
Регистрация: 24.02.2017
Сообщений: 213
Завершенные тесты: 1
12.07.2017, 21:36 #15
GbaLog-, посмотри
0
Миниатюры
По данной строке, определите, является ли она палиндромом  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2017, 21:36
Привет! Вот еще темы с ответами:

В данной строке символов посчитать количество вхождений данной буквы - C++
Указатели и строки. 1) В данной строке символов посчитать кол-во данной буквы 2) Дана последовательность слов, найти кол-во слов в...

Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени - C++
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени.

Является ли строка палиндромом - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; bool palindrom(char s); int main() { char s; ...

Является ли число палиндромом - C++
Алгоритм проверки числа должен быть именно такой (так поставили задачу) Но он работает некорректно. / Число - палиндром #include...


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

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

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