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

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

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

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

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

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

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

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

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

31
(SkyNet)
22 / 40 / 15
Регистрация: 25.10.2011
Сообщений: 175
07.11.2011, 20:59 21
Не работает, функции динамической памяти не правельно написаны.

Добавлено через 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#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++;
      /* выделяем память для очередного слова: */
      char *word = new char[i-j+1];
      //word = (char *)malloc((i - j + 1) * sizeof(char));
      /* копируем в переменную word символы очередного слова */
      strncpy(word, &sentence[j], i - j);
      word[i - j] = '\0';
      if(Symmetric(word))
         puts(word);
      delete [] word;
      //free(word);      /* освобождаем динамическую память */
      word = NULL;
   }
   getchar();
   return 0;
}
Ага оно и видно что не сама делала, а ищё на ковото гонит, функции старые как свет. У меня так роботает. И на том спасибо!!!
0
Olga_
842 / 184 / 18
Регистрация: 01.08.2011
Сообщений: 502
07.11.2011, 21:27 22
Цитата Сообщение от (SkyNet) Посмотреть сообщение
Не работает, функции динамической памяти не правельно написаны.

Ага оно и видно что не сама делала, а ищё на ковото гонит, функции старые как свет. У меня так роботает. И на том спасибо!!!
<stdlib.h> надо еще подключить. Вообще-то сама прописывала алгоритм.
0
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
08.11.2011, 21:00 23
Внесу свой вклад.

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
53
54
55
56
57
58
59
#include <stdio.h>
 
const char * delimiters = " ,.?!:;'\"()[]{}&_|\\/\n";
 
char is_one_of( const char ch, const char * rvals )
{
    while( *rvals && *rvals != ch )
       rvals++;
 
    return *rvals && *rvals == ch;
}
 
char * find_word_begin( const char * ptr )
{
    while( *ptr && is_one_of( *ptr, delimiters ) )
       ptr++;
 
    return ptr;
}
 
char * find_word_end( const char * ptr )
{
    while( *ptr && !is_one_of( *ptr, delimiters ) )
       ptr++;
 
    return ptr;
}
 
void fout_range( const char * begin, const char * end, FILE * file )
{
    while( begin != end )
        fputc( *begin++, file );
}
 
char is_symmetrical( const char * begin, const char * end )
{
    while( *begin++ == *--end );
    return begin != end;
}
 
int main()
{
    #define STRING_LNG 256
    char str[ STRING_LNG ];
 
    fputs( "> ", stdout );
    fgets( str, STRING_LNG, stdin );
 
    char * word_begin = str,
         * word_end = str;
 
    while( *(word_end = find_word_end( word_begin = find_word_begin( word_end ) )) )
    {
        fout_range( word_begin, word_end, stdout );
        printf( ": %ssymmetrical\n", is_symmetrical( word_begin, word_end ) ? "" : "not " );
    }
 
    return 0;
}
Хотя, похоже, проблема уже решена.

Добавлено через 3 минуты

Не по теме:

Ого, первый пост вообще старый.

1
Novyichok_v_del
1 / 1 / 1
Регистрация: 15.06.2011
Сообщений: 29
10.12.2011, 10:31 24
-Вопрос можно?
-Можно...
-Так вопрос заключается в том, что он якобы на строки, но не конкретно к палиндромам, нужно так забабахать, чтобы можно было вводить через пробелы прилагательные, и выводить их количество по окончаниям (Н-р: вывод: окончаний на -ая-столько-то; окончаний на -ое- столько-то; окончаний на -ый- столько-то
-......../

Добавлено через 16 минут
Цитата Сообщение от Novyichok_v_del Посмотреть сообщение
-Вопрос можно?
-Можно...
-Так вопрос заключается в том, что он якобы на строки, но не конкретно к палиндромам, нужно так забабахать, чтобы можно было вводить через пробелы прилагательные, и выводить их количество по окончаниям (Н-р: вывод: окончаний на -ая-столько-то; окончаний на -ое- столько-то; окончаний на -ый- столько-то
-......../
...а так я нашёл здесь кое-что, но оно нихрена не пашета именно в нём не реализован ввод с клавиатуры и плюс ко всему какой-то нахрен namspace, который не запускается на стареньком турбо-с++)
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
#include <iostream.h>
#include <string.h>
#include <vector.h>
#include <locale.h>
using namespace std;
 
int main(int argc, char * argv[])
{
        setlocale(LC_ALL, "ru_RU.UTF-8");
 
        const wchar_t* strs[] = {L"зеленые", L"варённые", L"отварное", L"угарное", L"старая"};
 
        vector<wstring> v(strs, strs + 5);
 
        int k=0;
        for(int i=0; i<v.size(); i++)
        {
                if(v[i].size()>2 &&
                    (      v[i].substr(v[i].size()-2, 2) == L"ый"
                        || v[i].substr(v[i].size()-2, 2) == L"ая"
                        || v[i].substr(v[i].size()-2, 2) == L"ое"
                    ))
                        k++;
 
        }
        wcout << k << endl;
        return 0;
}
0
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.12.2011, 13:02 25
Novyichok_v_del, хтож вам виноват, что сейчас на дворе 2011 год со стандартом C++11, а вы пользуетесь Turbo C++ 3 91-го года?
0
TheAthlete
154 / 154 / 16
Регистрация: 31.08.2010
Сообщений: 539
10.12.2011, 16:43 26
тем более в новом стандарте (в том числе C++03 и тем более C++11) заголовочные файлы пишутся без .h, т.е
C++
1
2
3
#include <iostream>
#include <string>
#include <vector>
и лучше использовать
C++
1
2
using std::vector;
using std::wcout;
и т.д.

вместо

using namespace std;
0
Novyichok_v_del
1 / 1 / 1
Регистрация: 15.06.2011
Сообщений: 29
11.12.2011, 18:55 27
Цитата Сообщение от talis Посмотреть сообщение
Novyichok_v_del, хтож вам виноват, что сейчас на дворе 2011 год со стандартом C++11, а вы пользуетесь Turbo C++ 3 91-го года?
отвечу, дабы прояснить ситуацию: учусь, а учат нас пока на истоках, тоесть закладывают фундамент...и вопросов в этом не должно быть на мой взгляд.
0
Spirited
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55
11.12.2011, 20:15 28
Цитата Сообщение от Novyichok_v_del Посмотреть сообщение
какой-то нахрен namspace, который не запускается на стареньком турбо-с++)
Вас никто не заставляет писать namspace, если не пашет - удалите его, если все равно не пашет - оставте его, но удалите всего два символа .h в названиях файлов которые прописываються в инклуда.
0
David Sylva
1296 / 958 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
12.07.2012, 11:52 29
Может кому пригодится простенький вариант
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
#include <iostream> 
using namespace std; 
int main() 
{   
    char str[100];
    cout << "Inter a string " << endl; 
    cin.getline(str, 100);
    int size = strlen(str); 
    int i, j;  
    int count = 0; 
 
    for ( i = 0, j = size - 1; i < size / 2; i++, j--) 
    {  
        if(str[i] == str[j]) 
            count++;
    }  
 
   if( count == size / 2) 
        cout << "Palindrom " << endl;   
        
    else  
        cout << "Ne palindrom " << endl;  
        
}
2
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
07.11.2014, 16:52 30
David Sylva,
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.h>
using namespace std; 
int main() 
{   
    char s[100];
    cout << "введите строку" << endl; 
    cin.getline(s, 100);
    int n = strlen(s); 
int k =0;
    for (int i = 0;  i < n / 2; i++ ){
 
if(s[i]!=s[n-1-i])
k=1;
}
if(k==1)
    cout << "непалиндром " << endl;
 
      else 
    cout<<"палиндром"<<endl;
}
вот получился еще немножко короче . я избавился от J и сложностями с ++,обьявил просто переменную k как аналог булевой переменной.
0
Phil
Эксперт 1С
244 / 245 / 75
Регистрация: 28.05.2014
Сообщений: 934
17.11.2014, 11:35 31
Написать программу, которая ищет в строке номер символа, с которого начинается палиндром – последовательность символов, которая читается одинаково в обе стороны и имеет длину не менее 5 символов, например, kazak, и печатает на экране эту последовательность.

Часть программы реализовал из имеющегося материала этой темы, часть допили сам, но как теперь вставить номер символа, с которого начинается палиндром (ведь он там может быть не один) я не пойму.
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>
#include <cstdlib>
#include <cstring>
using namespace std;
bool is_palindrom(const string &s) {
  return equal(s.begin(), s.end(), s.rbegin());
}
int is_lenght (string &s)
{
  return (s.length());
}
int main() {
string palindrom;
  cout << "Enter palindrom: ";
 while( cin >> palindrom) {
    if ((is_palindrom(palindrom))&&(is_lenght(palindrom)>4))
      cout << " +++  This is palindrom -  " << palindrom<<endl;
    else
      cout << " ---  This is not palindrom - " <<palindrom<< endl;
  }
 system("pause");
  return 0;
}
0
yutsura
-11 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 30
13.10.2016, 20:27 32
А я написал программу, которая проверяет, является ли число палиндромом
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
int nlength(int number) //функция для нахождения длины числа
{    
    int counter=0;
    while(number)
    {        
        number=number/10;
        counter++;
    }
    return (counter);
}
 
int reverse(int x)
{
    int multiplier = 10;//множитель
    int arr[nlength(x)] = {};//массив для хранения разрядов числа
    int i = 0;
    int size = nlength(x);//переменная для размера числа
 
    while(i < size)
    {
        //временная переменная для хранения начального значения числа
        int temp = x;
        //сокращаем число на один разряд, чтобы убрать лишние числа
        x = x / multiplier;
        //прибавляем один разряд, но уже без лишних чисел
        x = x * multiplier;
        //от исходного числа отнимаем полученное число
        temp = temp - x;
        if (i != 0)//первое число не нужно понижать в разряде
        {
            temp /= multiplier / 10;//сокращаем число на один разряд
        }
        //помещаем один разряд числа в массив
        arr[i] = temp;
        //увеличиваем множитель в 10 раз, чтобы при следующей итерации работать с числом на один разряд больше
        multiplier *= 10;
        i++;//увеличиваем i, чтобы перейти к следующему разряду
    }
    
    for (int i = 0, j = size-1; i < size-1; i++, j--)
    {
        //в этом цикле мы возводим множитель в степень j, где j это номер цифры по порядку
        multiplier = 10;
        multiplier = pow(multiplier, j);
        arr[i] *= multiplier;
    }
    
    int result = 0;
    
    for (int i = 0; i < size; i++)
    {
        result += arr[i];
    }
    
    return result;
    
}
 
int main()
{
    
    int x;
    cout << "Введите число : ";
    cin >> x;
    if (x == reverse(x)) cout << "Число является полиндромом" << endl;
    else cout << "Число не является полиндромом" << endl;
    
    return 0;
}
0
13.10.2016, 20:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2016, 20:27

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

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

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


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

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

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