Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/266: Рейтинг темы: голосов - 266, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
1

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

12.03.2010, 15:08. Показов 49405. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста.
Реализовать функцию, которая принимает строку и возвращает истину, если строка является палиндромом.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2010, 15:08
Ответы с готовыми решениями:

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

Проверить является ли введенная строка палиндромом
Объясните как это работает , желательно с комментариями возле кода #include"stdio.h" ...

Определить, является ли введённая с клавиатуры строка палиндромом
Определить, является ли введённая с клавиатуры строка палиндромом - выполнить тремя способами:...

Проверить, является ли строка, введённая с клавиатуры, палиндромом
ЗАдание следующее: Написать программу, которая проверяет, является ли строка, введённая с...

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

Добавлено через 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
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
07.11.2011, 21:27 22
Цитата Сообщение от (SkyNet) Посмотреть сообщение
Не работает, функции динамической памяти не правельно написаны.

Ага оно и видно что не сама делала, а ищё на ковото гонит, функции старые как свет. У меня так роботает. И на том спасибо!!!
<stdlib.h> надо еще подключить. Вообще-то сама прописывала алгоритм.
0
794 / 546 / 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
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
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.12.2011, 13:02 25
Novyichok_v_del, хтож вам виноват, что сейчас на дворе 2011 год со стандартом C++11, а вы пользуетесь Turbo C++ 3 91-го года?
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
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
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
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55
11.12.2011, 20:15 28
Цитата Сообщение от Novyichok_v_del Посмотреть сообщение
какой-то нахрен namspace, который не запускается на стареньком турбо-с++)
Вас никто не заставляет писать namspace, если не пашет - удалите его, если все равно не пашет - оставте его, но удалите всего два символа .h в названиях файлов которые прописываються в инклуда.
0
1321 / 983 / 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
50 / 31 / 11
Регистрация: 10.06.2012
Сообщений: 395
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
Эксперт 1С
434 / 305 / 92
Регистрация: 28.05.2014
Сообщений: 1,247
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
-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
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 27
07.01.2019, 17:16 33
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 <Windows.h>
using namespace std;
 
bool palindrom(char *str);
 
int main()
{
    char str[255];
    cout << "Enter string: "; cin >> str;
    if (palindrom(str)) cout << "String \"" << str << "\" is palindrome\n";
    else cout << "String \"" << str << "\" is not palindrome\n";
 
    system("pause");
    return 0;
}
 
bool palindrom(char *str)
{
    char *leftIndex = str;
    char *rightIndex = &str[strlen(str) - 1];
 
    while (leftIndex < rightIndex)
    {
        if (*leftIndex == *rightIndex) {
            leftIndex++;
            rightIndex--;
        }
        else return false;
    }
    return true;
}
0
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 13
11.06.2021, 15:33 34
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
#include <iostream>
#include <cstring>
 
int main ()
{
    using std::cin;
    using std::cout;
    using std::string;
 
    string Line{}; int Check=0;
    std::cout<< "Enter your line: ";
    getline(cin,Line);
    int i = Line.length(), k=0;
 
    while (k!=i)
    {
        if (Line[k]!=Line[i-1])
        {
            cout <<"It is not a palindrome!";
            Check=1;
            break;
        }
        k++;i--;
    }
    if (Check ==0)
        cout <<"It is a palindrome!";
 
      return 0;
}
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,072
Записей в блоге: 3
11.06.2021, 15:41 35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main ()
{
    std::string Line;
    {   std::cout << "Enter your line: "; getline(std::cin,Line);
    }
 
    Line == std::string(Line.rbegin(), Line.rend()) ?
        std::cout <<"It is a palindrome!"    :
        std::cout <<"It is not a palindrome!";
 
    return 0;
}
1
11.06.2021, 15:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2021, 15:41
Помогаю со студенческими работами здесь

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

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

Используя стек, определить, является ли введённая с клавиатуры строка палиндромом
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.

Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. Не могу...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru