-
Здравствуйте мастера 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")то все будет в порядке.Думал дело в компиляторе,но проверил в онлайн и тоже самое. Откуда неверный результат?
-
так это в коде же и написано: "Не хватает test = 0" Если там вставить test = 0; - то всё заработает как надо.
-
Штука в том, что в слове Hotels была найдена одна s, test стало равно 1 Доезжаем до слова Message - на первой же букве s у нас test становится равной 2 - хотя это первая буква s в этом слове, он мы же забыли сбрасывать test между словами в 0 Вот тут и печатается то, на что в этот момент указывает count
Кстати, концовку с выводом результата можно же упростить:
} // это закрывающая от самого первого for(count = 0; arr[nArr] = '\0'; printf(arr); getch(); }
-
Спасибо!Элементарные вещи пропустил:)Забыл в конце цикла count обнулить test = 0;Кстати насчет вывода тоже не подумал:)
|