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

троки в С++, Как сделать чтобы прога определяла слова-палиндромы? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
ermackprogramis
0 / 0 / 0
Регистрация: 30.11.2010
Сообщений: 3
28.12.2010, 22:21     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #1
Добрый вечер.Помогите, пожалуйста,не знаю как задать так, чтобы прога определяла слова, которые читаются справа налево однаково.
Вот нормальное условие:

В строке символов найти слова-палиндромы, которые однаково
читаются справа налево и наоборот. Найти наибольшую длину этих слов.
Если таких слов нет, то с каждого слова на непарной позиции убрать гласные и вывести их на экран.

Добавлено через 59 секунд
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// подключение библиотек
#include "stdafx.h" 
#include <iostream>
 
using namespace std; 
 
// оглашение переменных
char s[100];
char scopy[100];
char word[100][100],w[25];
int n;
 
//===функция ввода===
void input()
{
cout<<"Input array"<<endl; 
gets(s); // ввод массива
cout<<"Enter array :"<<endl; 
puts(s); // вывод массива
}
 
//===функция поиска слов===
void solution()
{
strcpy(scopy,s);
 
char *ptr; // указатель на искаемую лексему
char *delimiter="., _!?:; \0"; // лексемы
int i=0;
ptr = strtok(scopy,delimiter); // первое слово рядка
while(ptr!=NULL) // поиск слов
{
strcpy(word[i],ptr); // занесение слов в массив
i++;
ptr = strtok(NULL,delimiter); // следующее слово
}
n=i;
}
 
//===поиск слов палиндромов===
bool words(char scopy[100])
{
size_t x(0), i, len(strlen(s) - 1), slen(len >> 1);
for(i = 0; i < slen; ++i) 
if(s[i] != s[len - i])
return false; 
return true;
}
 
void longword()
{
int max = strlen(word[0]);
strcpy(w,word[0]);
for(int i=0;i<n;i++)
{
if (max<strlen(word[i]))
{
max=strlen(word[i]);
strcpy(w,word[i]);
}
cout<<"Word = "<<w<<" length = "<<max<<endl;
}
}
 
//===функция вывода===
void output()
{
cout<<"========================="<< endl;
for(int i=0;i<n;i++)
{
puts(word[i]);
}
cout<<"Number of words"<<n<<endl;
}
//===главная функция===
int main()
{
input();
solution();
words(scopy);
longword();
output();
system("pause");
}
Вот я здесь пробывал, взгляните
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2010, 22:21     троки в С++, Как сделать чтобы прога определяла слова-палиндромы?
Посмотрите здесь:

C++ что сделать чтобы прога сама по себе открылась?
C++ Приложение распознающее слова палиндромы
C++ Написать программу, которая выделяет любим способом в тексте слова палиндромы (слова, которые читаются одинаково справа налево и слева направо)
C++ Строки.Как сдеать так чтобы програмка определяла окончания?
Слова-палиндромы в тексте C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
28.12.2010, 23:31     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    bool polidrom(char s[100000]){
  int x=0;
        for(int i=0,j=strlen(s)-1;j>=strlen(s)/2,i<strlen(s)/2;j--,i++)
 
        {               
                if(s[j]==s[i])
                 x=1; 
                else
                 break;
        }       
 
        if(x)        return 1;
        else    return 0;}
если слово-палиндром,возвращает 1 если нет то 0

Добавлено через 26 секунд
и напишите код в специальном С++ теге
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.12.2010, 23:58     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #3
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
если слово-палиндром,возвращает 1 если нет то 0
Или так
C++
1
2
3
4
5
6
7
bool is_palindrom(std::string &str)
{
    std::string _str = str;
    std::reverse(_str.begin(), _str.end());
 
    return _str == str;
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
29.12.2010, 00:08     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #4
Цитата Сообщение от asics Посмотреть сообщение
return _str == str;
не понятно?

Добавлено через 18 секунд
а бул возвращает стринг??Оо
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
29.12.2010, 00:13     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #5
Цитата Сообщение от ermackprogramis Посмотреть сообщение
В строке символов найти слова-палиндромы, которые однаково
читаются справа налево и наоборот. Найти наибольшую длину этих слов.
Если таких слов нет, то с каждого слова на непарной позиции убрать гласные и вывести их на экран.
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
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
 
void set_prob(std::string &str)
{
    std::string del(" ,.?!:;");
 
    for(std::string::iterator it = str.begin(); it != str.end(); ++it)
        if(del.find(*it) != std::string::npos)
            *it = ' ';
}
 
bool is_palindrom(std::string &str)
{
    std::string _str = str;
    std::reverse(_str.begin(), _str.end());
 
    return _str == str;
}
 
std::string get_max_wrd(std::vector<std::string> &vec)
{
    std::string max_str = vec[0];
 
    for(std::string::size_type i = 0; i < vec.size(); ++i)
        if(vec[i].length() > max_str.length())
            max_str = vec[i];
 
    return max_str;
}
 
int main()
{
    std::cout << "\n\nString -> ";
    std::string str, tmp, _tmp;
    getline(std::cin, str);
 
    set_prob(str);
    std::istringstream ist(str);
    std::istringstream _ist(str);
    std::vector<std::string> vec, _vec;
 
    while(ist >> tmp)
        if(is_palindrom(tmp))
            vec.push_back(tmp);
 
    while(_ist >> _tmp)
        _vec.push_back(_tmp);
 
    if(!vec.empty())
        std::cout << "\n\nMax word from palindrom -> " << get_max_wrd(vec) << std::endl;
 
    else
    {
        std::cout << "\n\nPalindroms is not found -> ";
        std::string glas_symb("AaEeIiOoUuYy");
 
        for(size_t i = 0; i < _vec.size(); ++i)
       {
            if(i % 2)
            {
                std::string tmp = _vec[i];
                for(std::string::iterator it = tmp.begin(); it != tmp.end(); ++it)
                    if(glas_symb.find(*it) == std::string::npos)
                         std::cout << *it;
 
                 std::cout << ' ';
            }
 
            else
                std::cout << _vec[i] << ' ';
        }
    }
 
    return 0;
}
Добавлено через 1 минуту
^Tecktonik_KiLLeR, Это
C++
1
return _str == str;
скороченая версия следующего
C++
1
2
3
4
if(_str == str)
   return 1;
else
   return 0;
Тепер понятно ?
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
29.12.2010, 00:20     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #6
Цитата Сообщение от asics Посмотреть сообщение
скороченая версия следующего
ничего себе........
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
29.12.2010, 00:20     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #7
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
C++
1
    bool polidrom(char s[100000]){/* ... */}
какой у вас оригинальный параметр функции, а указатели уже не катят?
Fleurgen
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
29.12.2010, 00:23     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #8
Есть еще такой код если поможет

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
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
 
int main()
{
   int n,j,f,k;
    char ar1[100];
    char ar2[100];
        
         printf("vvesti frazu \n");
         gets(ar1);      // вводим строку
            n=strlen(ar1);   //определяем длинну строки
            j=0; f=0; k=0;   //обнуляем значения
                while(k<n)       //пока k меньше длины строки выполняем услове
                 {
                  if(ar1[k]==' ')   //если встречаем пробел
                    {
                     for(int j=k; j<n; j++) 
                     ar1[j]=ar1[j+1];
                     n--;
                     k--;
                     }              //удаляем его
                 k++;
                }
            for(int i=n-1; i>=0; i--)       //записываем первую строку с конца
                {
                 for(j=f; j<n; j++)
                   {
                    ar2[j]=ar1[i];
                   }
              j=0;
              f++;
                }
 
            int p;                  //сравниваем
        p=strncmp(ar1,ar2,n); // функция сравнивает до n-ого эл., если равны то возвр.0
     if(p==0) printf("Eto polindrom\n\n");
    else printf("Eto ne polindrom\n\n");
 system("pause");
return 0;
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
29.12.2010, 00:26     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #9
vx5, я учусь на первом курсе...перед этим самоучкой был..тогда знал теперь все забылкак будет? char *s?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 00:29     троки в С++, Как сделать чтобы прога определяла слова-палиндромы?
Еще ссылки по теме:

Слова-палиндромы C++
слова-палиндромы C++
Дана строка, содержащая разделенные пробелами слова, вывести все слова-палиндромы C++

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

Или воспользуйтесь поиском по форуму:
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
29.12.2010, 00:29     троки в С++, Как сделать чтобы прога определяла слова-палиндромы? #10
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
vx5, я учусь на первом курсе...перед этим самоучкой был..тогда знал теперь все забылкак будет? char *s?
верно, все вы помните
Yandex
Объявления
29.12.2010, 00:29     троки в С++, Как сделать чтобы прога определяла слова-палиндромы?
Ответ Создать тему
Опции темы

Текущее время: 06:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru