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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2022, 12:26   #11
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

Но он почему-то пропускает символ 'g'.

Последний раз редактировалось Jorsan; 25.06.2022 в 12:35.
Jorsan вне форума Ответить с цитированием
Старый 25.06.2022, 12:35   #12
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

Так я заметил, что из-за "break;" в цикле у меня цикл не доходит до последнего слова, но если его убрать то получается, что слова будут повторяться много раз и склеиваться.
Jorsan вне форума Ответить с цитированием
Старый 25.06.2022, 12:37   #13
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

Jorsan, а хотя нет, он доходит, но всё так же не видит символ 'g'....
Jorsan вне форума Ответить с цитированием
Старый 25.06.2022, 12:46   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Я не понимаю зачем так мудрить и что-то копировать. Я же написал, что достаточно 1 раз пройти по строке. А у вас тут a.find(' ', index) по несколько раз. Еще и копирование подстрок - жуть. Это же куча манипуляций с динамической памятью и лишние проходы по строке. Вот так стоит сделать

Последний раз редактировалось macomics; 25.06.2022 в 12:55.
macomics вне форума Ответить с цитированием
Старый 25.06.2022, 12:57   #15
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

macomics, как много букавок, назвали бы хоть по-понятнее, и зачем придумывать для true и false свои переменные? Хотелось, чтобы Вы по-подробнее объяснили каждую строчку данного кода:
Код:
    for (char *c = s; c[0]; c++) {
         if (c[0] == ' ') {
            f = true;
            if (g) {
                c[0] = 0;
                word(w);
                c[0] = ' ';
                g = false;
            }
        } else if (!f && !g && c[0] != ' ') {
            for (i = l; i[0] && c[0] != i[0]; i++);
            g = i[0] != 0;
        } else if (f && c[0] != ' ') {
            f = false;
            w = c;
        }
    }
Jorsan вне форума Ответить с цитированием
Старый 25.06.2022, 13:06   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

В моих первых постах описано то, что тут происходит.
Код:
    for (char *c = s; c[0]; c++) { // цикл прохода по строке 'c' - счетчик цикла он же указатель на символ.
// c[0] == 0 - завершение цикла; c++ - увеличение счетчика и переход к указателю на следующий символ.
        // std::cout << c[0] << std::endl; // Добавьте эту строку, чтобы понять как работает этот цикл
         if (c[0] == ' ') { // Если c[0] == ' ' - разделитель слова (найден конец слова), тогда f = true (ожидаем начала слова)
            f = true;
            if (g) { // если g == true - найденное слово содержало согласную, тогда выводим его и сбрасываем g
                c[0] = 0;
                word(w);
                c[0] = ' ';
                g = false;
            }
        }
        if (f && c[0] != ' ') { // Если найдено начало слова, тогда запоминаем указатель на символ, с которого оно начинается
            f = false; // Не ждем начала слова
            w = c;
        }
        if (!f && !g && c[0] != ' ') { // Каждый символ в слове проверяем на наличие согласных букв, пока не найдем совпадение
            for (i = l; i[0] && c[0] != i[0]; i++);
            g = i[0] != 0; // Как только нашли - дальше можно не проверять до конца слова
        }
    }
add; Поправил немного

Последний раз редактировалось macomics; 25.06.2022 в 13:14.
macomics вне форума Ответить с цитированием
Старый 25.06.2022, 13:38   #17
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вот так будет компактнее
macomics вне форума Ответить с цитированием
Старый 25.06.2022, 13:48   #18
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

macomics, а почему у Вас i выводится не как word: 'i'?
Jorsan вне форума Ответить с цитированием
Старый 25.06.2022, 13:51   #19
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

'i' - это счетчик цикла проверки вхождения символа строки 'c' в строку 'l'.
Код:
            for (i = l; *i && *c != *i; i++);
            g = i[0] == 0;
Это идентично
Код:
g = l.find(*c) == -1;

Последний раз редактировалось macomics; 25.06.2022 в 13:55.
macomics вне форума Ответить с цитированием
Старый 25.06.2022, 13:52   #20
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

macomics, нет, я имел ввиду, у Вас же предложение "i can see", но вывелись только 2 слова: 'can' и 'see'.

Последний раз редактировалось Jorsan; 25.06.2022 в 14:05.
Jorsan вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[VBA] Сформировать матрицу, у которой первая строка – произвольные числа, вторая строка - квадраты этих чисел, третья строка - кубы этих чисел и т.д. SkyGir Помощь студентам 5 24.05.2019 17:04
Определить, чередуются ли в строке гласные и согласные буквы Waise Помощь студентам 12 27.04.2015 11:56
Delphi 7: гласные и согласные kiberzem Общие вопросы Delphi 2 18.02.2014 22:01
Ряд символов. Согласные. asmars Общие вопросы C/C++ 4 14.04.2012 04:44
Гласные и согласные буквы artemavd Общие вопросы Delphi 7 22.06.2009 20:53