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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 248, средняя оценка - 4.85
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
#1

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

12.03.2010, 15:08. Просмотров 31199. Ответов 31
Метки нет (Все метки)

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

Написать рекурсивную функцию, проверяющую, является ли массив симметричным C++
C++ Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
C++ В целочисленном массиве найти и напечатать те элементы, которые являются степенью 2. Написать функцию, проверяющую, является ли число степенью 2.
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
Дана строка символов. Проверьте,является ли данная строка палиндромом C++
C++ Проверить, является ли введенная строка палиндромом
C++ Разработать рекурсивную функцию, определяющую является ли заданная строка палиндромом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 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
8277 / 3496 / 143
Регистрация: 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
2220 / 735 / 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
Сообщений: 503
10.05.2010, 20:00     Написать функцию, проверяющую является ли введенная строка палиндромом #8
а как сделать чтоб из строки выдиралось по слову и проверялось на палиндромность "С"?
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
23.04.2011, 22:27     Написать функцию, проверяющую является ли введенная строка палиндромом #9
а как сделать, чтобы из стороки брался набор символов с позиции i по позицию j и проверял палиндром ли он????
rangerx
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
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
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
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
2842 / 1779 / 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++
Указатели: написать функцию, проверяющую, является ли массив В подмножеством массива А 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:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru