Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2018, 18:34   #1
StillNoob
Пользователь
 
Регистрация: 27.03.2018
Сообщений: 21
По умолчанию в потоке символов сосчитать и вывести слова- палиндромы

Я не понимаю как мне ввести массив для моей программы (читал,всё-равно не понял)
не могли бы вы мне помочь
Код:
#include <stdio.h>
#include <string.h>
#define YES 1
#define NO 0
void main( void )
{
int c; // текущий символ из потока
int flag,lenght; // признак слова
int cnt,k; // счётчик
int found,i; // признак того, что слово-палиндром
// начальные присваивания (инициализация переменных)
cnt = 0;
flag = NO;
found = NO;
// цикл чтения символов из потока
while( (c = getchar()) != EOF )
{
        if( c == ' ' || c == '.' || c == '\n' || c == ',' )
        {
        // найден разделитель
        if( flag == YES )
        {
        // найден первый разделить после слова
        if( found == YES )
        {
        // слово оказалось палиндромом
        cnt = cnt + 1;
        }
        }
        flag = NO;
        }
        else
        {
        // проверка палиндрома
        lenght=strlen(str);
for (i=0;i<(lenght/2);i++)
{
    if (str[i]==str[(lenght-1)-i])
    {
        found=YES;
        ++k;
        printf("polindrom-%s",str);
    }
    else
    {
        found=NO;
    flag = YES;
    }
        }
        printf("count of polindrome = %d\n", cnt );
}
StillNoob вне форума Ответить с цитированием
Старый 27.03.2018, 21:28   #2
Ksonix
Пользователь
 
Регистрация: 23.01.2018
Сообщений: 12
По умолчанию

это нормальный код что не понятного тол он фрагмент. Запускаеш прогу и в консоле вводеш последовательность слов и из них находит полендрома.

про EOF почитай в https://ru.wikipedia.org/wiki/EOF
Ksonix вне форума Ответить с цитированием
Старый 29.03.2018, 00:30   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Зачем массивы вообще?
Код:
#include <iostream>
#include <algorithm>
#include <string>

size_t num_of_palindroms(std::istream& in)
{
   std::string buffer;
   size_t result = 0;
   while(in>>buffer)
   {
      if (std::equal(buffer.begin(), buffer.begin()+buffer.size()/2, buffer.rbegin()))
         ++result;
   }
   return result;
}
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 29.03.2018, 04:28   #4
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Зачем массивы вообще?
Код:
#include <iostream>
#include <algorithm>
#include <string>

size_t num_of_palindroms(std::istream& in)
{
   std::string buffer;
   size_t result = 0;
   while(in>>buffer)
   {
      if (std::equal(buffer.begin(), buffer.begin()+buffer.size()/2, buffer.rbegin()))
         ++result;
   }
   return result;
}
Та не, во входных данных по идее может быть любое число слов, и любое из них может быть полиндромом.

Последний раз редактировалось alexzk; 29.03.2018 в 04:31.
alexzk вне форума Ответить с цитированием
Старый 29.03.2018, 15:02   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

А мой код что делает, по-вашему?

Код:
#include <iostream>
#include <algorithm>
#include <string>

size_t num_of_palindroms(std::istream& in)
{
   std::string buffer;
   size_t result = 0;
   while(in>>buffer)
   {
      if (std::equal(buffer.begin(), buffer.begin()+buffer.size()/2, buffer.rbegin()))
         ++result;
   }
   return result;
}

#include <sstream>
int main()
{
    for (std::string s: {"Hi mom IttI KooK", "aabb abba baab bacab titi kakak", "aabbaa "})
    {
       std::istringstream in(s);
       std::cout<<num_of_palindroms(in)<<std::endl;
    }
}
Вывод:
Цитата:
3
4
1
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 29.03.2018, 15:08   #6
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Поясняю:
любой istream приводится к bool следующим образом: (предыдущее чтение успешно)?true:false
Писать через eof намного некрасивее:
Код:
do{
   in>>buffer;
   if(in.eof()) break;
   handle_buffer(buffer);
}
while(1);
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 29.03.2018, 17:46   #7
StillNoob
Пользователь
 
Регистрация: 27.03.2018
Сообщений: 21
По умолчанию

я ещё новичок и пользуюсь только <stdio.h>,для лучшего понимания.
я не понимаю ни эти функции ,ни строения вообще
StillNoob вне форума Ответить с цитированием
Старый 29.03.2018, 17:51   #8
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

del

Последний раз редактировалось alexzk; 29.03.2018 в 17:53.
alexzk вне форума Ответить с цитированием
Старый 29.03.2018, 19:05   #9
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

stdio.h — это же библиотека из C, разве нет?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 29.03.2018, 20:41   #10
Ksonix
Пользователь
 
Регистрация: 23.01.2018
Сообщений: 12
По умолчанию

Да

Цитата:
Сообщение от StillNoob Посмотреть сообщение
я ещё новичок и пользуюсь только <stdio.h>,для лучшего понимания.
я не понимаю ни эти функции ,ни строения вообще
Задачу можно решит по разным путям. его код тож поставленную задачу решал.
StillNoob тебе какая помощь нужна мы рады помочь тебе.
Ksonix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Заменить в строке слова S на слова vladeasy Общие вопросы C/C++ 1 18.01.2018 21:01
Работа со строками. Превернуть слова в строке и удалить слова-палиндромы (С) Andr0meda Помощь студентам 0 19.12.2017 17:32
адана строка символов, состоящая из слов. Вывести все слова строки в алфавитном порядке. 9066788 Паскаль, Turbo Pascal, PascalABC.NET 1 19.01.2014 17:00
Символьная строка содержит слова, разделенные пробелами. Найти все слова-палиндромы (Паскаль) sashunechka Помощь студентам 4 18.05.2011 21:45
Вывести все слова входного потока, заканчивающиеся заданной последовательностью символов fiaftw Общие вопросы C/C++ 2 03.02.2009 00:44