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

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

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

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

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

Помогите пожалуйста.
Реализовать функцию, которая принимает строку и возвращает истину, если строка является палиндромом.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2010, 15:08     Написать функцию, проверяющую является ли введенная строка палиндромом
Посмотрите здесь:
C++ Проверить, является ли введенная строка палиндромом
C++ Написать функцию, которая определяет, является ли строка палиндромом
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
C++ Написать программу проверяющую является ли строка полиндромом
C++ Разработать рекурсивную функцию, определяющую, является ли заданная строка палиндромом
C++ Разработать рекурсивную функцию, определяющую является ли заданная строка палиндромом
Написать программу, которая проверяет, является ли введенная с клавиатуры строка шестнадцатеричным числом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
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
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.03.2010, 21:30     Написать функцию, проверяющую является ли введенная строка палиндромом #3
http://www.cyberforum.ru/cpp-beginne...tml#post506088
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
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
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
Сообщений: 505
10.05.2010, 20:00     Написать функцию, проверяющую является ли введенная строка палиндромом #8
а как сделать чтоб из строки выдиралось по слову и проверялось на палиндромность "С"?
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
23.04.2011, 22:27     Написать функцию, проверяющую является ли введенная строка палиндромом #9
а как сделать, чтобы из стороки брался набор символов с позиции i по позицию j и проверял палиндром ли он????
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.05.2011, 23:55     Написать функцию, проверяющую является ли введенная строка палиндромом #16
Цитата Сообщение от протест Посмотреть сообщение
является рекурсивной функцией?????
Нет.
Цитата Сообщение от протест Посмотреть сообщение
или как ее написать
Посмотри тут.
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
152 / 152 / 13
Регистрация: 31.08.2010
Сообщений: 534
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
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_
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     Написать функцию, проверяющую является ли введенная строка палиндромом
Ответ Создать тему
Опции темы

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