Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Не могу понять ошибку


Непрограммист   (30.05.18 12:20

Здравствуйте мастера Delphi!Вот решал задачу на языке C(Dev C++)

Задача:
Вывести текст, составленный из первых букв всех слов; все слова, содержащие больше одной буквы «s».

Решение:

#include <stdio.h>

int main()
{  
   int    count, coun, n = 0, nArr = 0, pos, test = 0;
   char   str[256] = "Hotels Hello Message One Glass Soft Ass";
   char   arr[256];
   
   n = strlen(str);
 
  for ( count = 0; count <= n-1; count++ )
  {
      if ( str[count] != ' ' )//Если встретилось слово
      {                      
           for ( coun = count; coun <= n-1; coun++ )
           {                      
               if ( str[coun] == ' ' )//
               {
                              // <--- Не хватает test = 0
                    break;
               }  
               
               if ( str[coun] == 'S' || str[coun] == 's' )
                      test++;
               
               if ( test == 2 )//
               {
                    arr[nArr] = str[count];
                    nArr++;    
                    count = coun;//Чтобы цикл count начал
                    test = 0;     //работу со следующего слова
                    break;  
               }
               
           }
      }
     
  }
 
  n = strlen(arr);
 
  for ( count = 0; count <= n-1; count++ )
  {
      printf("%c", arr[count]);
  }
 
 
 getch();
}

Результат должен быть MGA,а получается gMGA.Функция break не помогает.То есть откуда-то взялся второй элемент первого слова.Но если в блоке условия if ( str[coun] == ' ' ) дописать test = 0; то будет нормальный вывод.Или если ничего не добавлять,но в строке str изменить первое слово "Hotels" на "Hotel"(первое слово без буквы "s")то все будет в порядке.Думал дело в компиляторе,но проверил в онлайн и тоже самое.
Откуда неверный результат?


KSergey ©   (30.05.18 12:45[1]

так это
в коде же и написано: "Не хватает test = 0"
Если там вставить test = 0; - то всё заработает как надо.


KSergey ©   (30.05.18 12:49[2]

Штука в том, что в слове Hotels была найдена одна s, test стало равно 1
Доезжаем до слова Message - на первой же букве s у нас test становится равной 2 - хотя это первая буква s в этом слове, он мы же забыли сбрасывать test между словами в 0
Вот тут и печатается то, на что в этот момент указывает count

Кстати, концовку с выводом результата можно же упростить:

 }  // это закрывающая от самого первого for(count = 0;
 
 arr[nArr] = '\0';
 printf(arr);
 
 getch();
}


Непрограммист   (30.05.18 13:03[3]

Спасибо!Элементарные вещи пропустил:)Забыл в конце цикла count обнулить test = 0;Кстати насчет вывода тоже не подумал:)


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо