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

Написать функцию, проверяющую является ли введенная строка палиндромом - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 248, средняя оценка - 4.85
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
12.03.2010, 15:08     Написать функцию, проверяющую является ли введенная строка палиндромом #1
Помогите пожалуйста.
Реализовать функцию, которая принимает строку и возвращает истину, если строка является палиндромом.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2010, 15:08     Написать функцию, проверяющую является ли введенная строка палиндромом
Посмотрите здесь:

C++ является ли введенная строка восьмеричным числом
C++ Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
C++ является ли введенная с клавиатуры строка вещественным числом
C++ В целочисленном массиве найти и напечатать те элементы, которые являются степенью 2. Написать функцию, проверяющую, является ли число степенью 2.
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2217 / 732 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
12.03.2010, 21:26     Написать функцию, проверяющую является ли введенная строка палиндромом #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
bool palindrom( char * str) { 
    int left_index = 0;
    int right_index = strlen(str)-1;
 
 
    while( left_index < right_index ) 
        if( str[left_index++]!= str[right_index--]) 
            return false;
 
    return true;
};
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
12.03.2010, 21:30     Написать функцию, проверяющую является ли введенная строка палиндромом #3
http://www.cyberforum.ru/cpp-beginne...tml#post506088
xBot01
 Аватар для xBot01
9 / 9 / 1
Регистрация: 25.09.2009
Сообщений: 17
13.03.2010, 18:43     Написать функцию, проверяющую является ли введенная строка палиндромом #4
Тоже палиндром.
Если поменять все на long, то будут обрабатываться русские символы.
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
13.03.2010, 20:13  [ТС]     Написать функцию, проверяющую является ли введенная строка палиндромом #5
А как сделать так, чтобы и пробелы учитывать, и чтобы не использовать <string.h>? Очень прошу, пришлите полный код программы
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2217 / 732 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
14.03.2010, 16:22     Написать функцию, проверяющую является ли введенная строка палиндромом #6
Цитата Сообщение от Maxvarlamov Посмотреть сообщение
А как сделать так, чтобы и пробелы учитывать, и чтобы не использовать <string.h>?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int strlen(char * str) { 
      int i=0;
      while(str[i++]) ;
      return i-1;
};
bool palindrom( char * str) { 
        int left_index = 0;
        int right_index = strlen(str)-1;
//на тот случай,если начинается или заканчивается пробелами
        while( str[left_index]==' ') left_index++;
        while( str[right_index]==' ') right_index++ ;  
 
        while( left_index < right_index )  {
              //сравниваем
              if( str[left_index]!= str[right_index]) 
                        return false;
             // пропускаем пробелы
              while( str[++left_index]==' ') ;
              while( str[--right_index]==' ') ;  
                
        } 
        return true;
};
Only_HED
4 / 4 / 0
Регистрация: 28.05.2009
Сообщений: 29
15.03.2010, 17:02     Написать функцию, проверяющую является ли введенная строка палиндромом #7
Еще один пример

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
#include <iostream>
#include <conio.h>
using namespace std;
 
char LIFO[100],ch[100];
int Empty,i,Top;
void Push(char number);
 
int main()
{
    cin>>ch;
    Top=0;
    for (i=0;i<strlen(ch);i++)
    {
        Push(ch[i]);
        if (LIFO[Top-1]==LIFO[Top-2] && Top>1)
        {
            Top-=2;
        }
    }
        if (Top==0)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;       
    system("PAUSE");
}
 
void Push(char number)
{
    LIFO[Top]=number;
    Top++;
}
koc94ok
9 / 9 / 1
Регистрация: 22.04.2010
Сообщений: 473
10.05.2010, 20:00     Написать функцию, проверяющую является ли введенная строка палиндромом #8
а как сделать чтоб из строки выдиралось по слову и проверялось на палиндромность "С"?
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
23.04.2011, 22:27     Написать функцию, проверяющую является ли введенная строка палиндромом #9
а как сделать, чтобы из стороки брался набор символов с позиции i по позицию j и проверял палиндром ли он????
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.04.2011, 13:21     Написать функцию, проверяющую является ли введенная строка палиндромом #10
Цитата Сообщение от протест Посмотреть сообщение
а как сделать, чтобы из стороки брался набор символов с позиции i по позицию j и проверял палиндром ли он????
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 <stdio.h>
#include <string.h>
 
int isPalSubStr(const char* s, size_t i, size_t j)
{
    size_t t = strlen(s);
    if(i < 0 || i >= t || j < 0 || j >= t) return 0;
 
    if(i > j)
    {
        t = i;
        i = j;
        j = t;
    }
 
    while(i < j)
        if(s[i++] != s[j--]) return 0;
    return 1;
}
 
//-------
 
int main()
{
    size_t i, j;
    char s[256];
 
    printf("string: ");
    gets(s);
 
    printf("i and j: ");
    scanf("%d%d", &i, &j);
 
    puts(isPalSubStr(s, i, j)? "yes" : "no");
 
    return 0;
}
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
24.04.2011, 13:45     Написать функцию, проверяющую является ли введенная строка палиндромом #11
а не в C, а в C++ как написать????????
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.04.2011, 14:40     Написать функцию, проверяющую является ли введенная строка палиндромом #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <algorithm>
 
bool isPal(std::string::const_iterator first, std::string::const_iterator second)
{
    const std::string string(first, second);
    std::string tmp_str;
    std::remove_copy(string.begin(), string.end(), std::back_inserter(tmp_str), ' ');
    return tmp_str == std::string(tmp_str.rbegin(), tmp_str.rend());
}
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    int first = 0, second = 0;
    std::cout<<"Enter [start, end) indexes: ";
    std::cin>>first>>second;
    std::cout<< (isPal(str.begin() + first, str.begin() + second) ? "Yes" : "No");
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.04.2011, 18:45     Написать функцию, проверяющую является ли введенная строка палиндромом #13
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 <algorithm>
 
bool isPal(const std::string& s, size_t i, size_t j)
{
    if(i >= s.length() || j >= s.length()) return false;
    if(i > j) std::swap(i, j);
    return std::equal(s.begin() + i, s.begin() + j, s.rbegin() + s.length() - j - 1);
}
 
int main()
{
    std::cout << "string: ";
    std::string s;
    std::getline(std::cin, s);
 
    size_t i, j;
    std::cout << "i and j: ";
    std::cin >> i >> j;
 
    std::cout << (isPal(s, i, j)? "yes" : "no" );
 
    return 0;
}
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
24.04.2011, 21:03     Написать функцию, проверяющую является ли введенная строка палиндромом #14
спасибо большое))))
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
18.05.2011, 21:48     Написать функцию, проверяющую является ли введенная строка палиндромом #15
C++
1
2
3
4
5
6
7
bool isPal(std::string::const_iterator first, std::string::const_iterator second)
{
    const std::string string(first, second);
        std::string tmp_str;
        std::remove_copy(string.begin(), string.end(), std::back_inserter(tmp_str), ' ');
    return tmp_str == std::string(tmp_str.rbegin(), tmp_str.rend());
}
или

C++
1
2
3
4
5
6
bool isPal(const std::string& s, size_t i, size_t j)
{
    if(i >= s.length() || j >= s.length()) return false;
    if(i > j) std::swap(i, j);
    return std::equal(s.begin() + i, s.begin() + j, s.rbegin() + s.length() - j - 1);
}
является рекурсивной функцией????? или как ее написать
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.05.2011, 23:55     Написать функцию, проверяющую является ли введенная строка палиндромом #16
Цитата Сообщение от протест Посмотреть сообщение
является рекурсивной функцией?????
Нет.
Цитата Сообщение от протест Посмотреть сообщение
или как ее написать
Посмотри тут.
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
01.08.2011, 18:01     Написать функцию, проверяющую является ли введенная строка палиндромом #17
Цитата Сообщение от koc94ok Посмотреть сообщение
а как сделать чтоб из строки выдиралось по слову и проверялось на палиндромность "С"?

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
#include <stdio.h>
#include <string.h>
#define DELIMITERS  " .,:;\n\t"           /* символы-разделители */
#define N 500
 
/* проверка на симметричность */
int Symmetric(char *s)
{
   int i, j;
   i = 0;
   j = strlen(s) - 1;
   while(i < j && s[i] == s[j])
   {
       i++;
       j--;
   }
   return i >= j;
}
 
int main( )
{
   char sentence[N];       /* исходная строка */
   char *word;               /* очередное слово в предложении */
       int flag[256] = {0}, len, i, j;
   len = strlen(DELIMITERS);
   /* если символ с кодом i является символом-разделителем,   то полагаем flag[i] = 1: */
   for (i = 0; i < len; i++)
          flag[DELIMITERS[i]] = 1;
   fgets(sentence, N, stdin);       /* вводим строку с клавиатуры */
   i = 0;
   while (sentence[i])
   {
      /* пропускаем все разделители */
      while (sentence[i] && flag[sentence[i]])
         i++;
      j = i;                                               /* позиция начала нового слова */
      /* определяем позицию окончания очередного слова в строке */
      while (sentence[i] && !flag[sentence[i]])
         i++;
      /* выделяем память для очередного слова: */
      word = (char *)malloc((i - j + 1) * sizeof(char));
      /* копируем в переменную word символы очередного слова */
      strncpy(word, &sentence[j], i - j);
      word[i - j] = '\0';
      if(Symmetric(word))
         puts(word);
      free(word);      /* освобождаем динамическую память */
      word = NULL;
   }
   getchar();
   return 0;
}

Читайте http://www.twirpx.com/file/540580/
TheAthlete
 Аватар для TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
01.08.2011, 18:59     Написать функцию, проверяющую является ли введенная строка палиндромом #18
Можно еще так сделать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <algorithm>
 
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::equal;
 
bool is_palindrom(const string &s) {
  return equal(s.begin(), s.end(), s.rbegin());
}
 
int main() {
  string palindrom;
  while(cout << "Enter palindrom: ", cin >> palindrom) {
    if (is_palindrom(palindrom))
      cout << " --- Ok. This is palindrom" << endl;
    else
      cout << " --- No. This is not palindrom" << endl;
  }
}
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
01.08.2011, 19:32     Написать функцию, проверяющую является ли введенная строка палиндромом #19
Цитата Сообщение от Maxvarlamov Посмотреть сообщение
Помогите пожалуйста.
Реализовать функцию, которая принимает строку и возвращает истину, если строка является палиндромом.
C++
1
2
3
4
5
6
bool isPaly(string s)
{
    string s1=s;
    reverse(s1.begin(),s2.begin());
    return (s1==s);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2011, 19:46     Написать функцию, проверяющую является ли введенная строка палиндромом
Еще ссылки по теме:

Дана строка символов. Проверьте,является ли данная строка палиндромом C++
C++ Разработать рекурсивную функцию, определяющую является ли заданная строка палиндромом
Написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным отрицательным числом C++

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

Или воспользуйтесь поиском по форуму:
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
01.08.2011, 19:46     Написать функцию, проверяющую является ли введенная строка палиндромом #20
Цитата Сообщение от aram_gyumri Посмотреть сообщение
C++
1
2
3
4
5
6
bool isPaly(string s)
{
    string s1=s;
    reverse(s1.begin(),s2.begin());
    return (s1==s);
}
Такой алгоритм не эффективен для больших строк. А вдруг уже первый и последний символы не совпадают? В этом случае проверку уже надо прекратить. Поэтому именно что-то вроде этого:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
/* проверка на симметричность */
int Symmetric(char *s)
{
   int i, j;
   i = 0;
   j = strlen(s) - 1;
   while(i < j && s[i] == s[j])
   {
       i++;
       j--;
   }
   return i >= j;
}
Yandex
Объявления
01.08.2011, 19:46     Написать функцию, проверяющую является ли введенная строка палиндромом
Ответ Создать тему
Опции темы

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