Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/195: Рейтинг темы: голосов - 195, средняя оценка - 4.76
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
1

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

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

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

Проверить, является ли введенная строка палиндромом
Написать программу, которая проверяет, является ли введенная строка палиндро-...

Написать функцию, которая определяет, является ли строка палиндромом
Всем привет! Облазил весь интернет, но так и не нашел решение задачи, не могу...

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

Реализовать функцию, проверяющую, является ли заданное число палиндромом и при этом не содержит цифру 7
Даны два целых числа A и B (A < B). Вывести все числа из диапазона ,...

Написать программу проверяющую является ли строка полиндромом
Написать программу проверяющую является ли строка полиндромом

31
XuTPbIu_MuHTAu
Эксперт С++
2235 / 750 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
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;
};
8
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
12.03.2010, 21:30 3
http://www.cyberforum.ru/cpp-beginners/thread89873.html#post506088
0
xBot01
10 / 10 / 0
Регистрация: 25.09.2009
Сообщений: 17
13.03.2010, 18:43 4
Тоже палиндром.
Если поменять все на long, то будут обрабатываться русские символы.
0
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
13.03.2010, 20:13  [ТС] 5
А как сделать так, чтобы и пробелы учитывать, и чтобы не использовать <string.h>? Очень прошу, пришлите полный код программы
0
XuTPbIu_MuHTAu
Эксперт С++
2235 / 750 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
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;
};
1
Only_HED
4 / 4 / 2
Регистрация: 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++;
}
1
koc94ok
10 / 10 / 2
Регистрация: 22.04.2010
Сообщений: 538
10.05.2010, 20:00 8
а как сделать чтоб из строки выдиралось по слову и проверялось на палиндромность "С"?
0
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
23.04.2011, 22:27 9
а как сделать, чтобы из стороки брался набор символов с позиции i по позицию j и проверял палиндром ли он????
0
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
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 / 0
Регистрация: 18.04.2011
Сообщений: 20
24.04.2011, 13:45 11
а не в C, а в C++ как написать????????
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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");
}
1
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
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;
}
1
протест
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 20
24.04.2011, 21:03 14
спасибо большое))))
0
протест
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);
}
является рекурсивной функцией????? или как ее написать
0
asics
Freelance
Эксперт С++
2858 / 1793 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
18.05.2011, 23:55 16
Цитата Сообщение от протест Посмотреть сообщение
является рекурсивной функцией?????
Нет.
Цитата Сообщение от протест Посмотреть сообщение
или как ее написать
Посмотри тут.
0
Olga_
842 / 184 / 18
Регистрация: 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/
1
TheAthlete
155 / 155 / 16
Регистрация: 31.08.2010
Сообщений: 540
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;
  }
}
0
dr.curse
393 / 349 / 36
Регистрация: 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);
}
0
Olga_
842 / 184 / 18
Регистрация: 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;
}
1
01.08.2011, 19:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2011, 19:46

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

Разработать рекурсивную функцию, определяющую, является ли заданная строка палиндромом
Разработать рекурсивную функцию, возвращающую значение: Определяющую, является...

Написать программу, которая определяет, является ли введенная с клавиатуры строка целым числом
1. Написать программу, которая определяет, является ли введенная с клавиатуры...


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

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

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