Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181

Для строки объединить в отдельную строку все слова, имеющие заданную букву, разделив их одним пробелом

25.11.2012, 12:26. Показов 1194. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Никак не получается отладить данную программу с учётом того, что буквы разного регистра неразличимы.
Вот код с небольшими комментариям.
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
//Для  строки  объединить  в  отдельную  строку  все  слова,  имеющие  
//заданную  букву,  разделив  их  одним  пробелом. 
#include <iostream>
#include <cstring>
using namespace std;
#define L 80
void subcopy(char* to, char* from, int amount) //куда копируем, откуда и кол - во символов
{
    int i;
    for(i=0; i < amount; i++)
        *(to + i) = *(from + i);
}
void HasLetter(char* str, char* res, char letter) //подразумеваем, что длина строки str не превосходит длину res
{
    int lenr = 0;
    int lenw = 0;
    bool found = false; //присутствие данной буквы в слове
    int reg = (letter < 'A' + 26)? 'a' - 'A': 'A' - 'a';    //считаем, что регистр не важен
    //printf ("letter + reg = %c\n", letter + reg);
    int i;
    for(i=0; *(str + i); i++)
    {   
        found = (*(str + i) == letter || *(str + i) + reg == letter || found)? true: false;
        /*for(int k=lenw; k >= 0; k--)
            printf("%c", *(str + i - k));
        printf("___found = %d\n", found);*/ // для отладки
        if(*(str + i) == ' ')
        {   
            if(found)
            {
                subcopy(res + lenr, str + i - lenw, lenw + 1); 
                /*printf("write: ");
                for(int j=0; j < lenw + 1; j++)
                    printf("%c", *(str + i - lenw + j));
                printf("\n");*/
                lenr+= lenw + 1;
            }
            lenw = 0;
            found = false;
        }
        else
            lenw++;
    }
    if(found)
        subcopy(res + lenr, str + i - lenw, lenw + 1); //если в конце строки стоит подходящее слово, то копируем вместе с '\0'
    else
        if(lenr)
            *(str + lenr - 1) = '\0';   //если есть хотя бы 1 слово с данной буквой
        else
            *(str + lenr) = '\0';       //случай с пустой строкой
}
int main()
{
    char str[L], res[L];
    gets(str);
    HasLetter(str, res, 'a'); 
    puts(res);
    cin.get();
    return 0;
}
Подскажите, что нужно подправить? Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2012, 12:26
Ответы с готовыми решениями:

В заданной строке, слова которого разделены одним пробелом, напечатать все слова, содержащие заданную последовательность букв
В заданной строке, слова которого разделены одним пробелом, напечатать все слова, содержащие заданную последовательность букв

Найти все слова в строке, начинающиеся на заданную букву и удалить из строки все слова, начинающиеся на заданную букву
2. Найти все слова в строке, начинающиеся на заданную букву и удалить из строки все слова, начинающиеся на заданную букву.

В заданном тексте из разделенных одним пробелом слов вывести на печать все слова, заканчивающиеся на букву «м»
В заданном тексте из разделенных одним пробелом слов вывести на печать все слова, заканчивающиеся на букву «м». Помогите! НАДО СОСТАВИТЬ...

2
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
25.11.2012, 13:38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
int main()
{
     char b[] = "string which has to be divided", s[100], *ss="s";
    char* str = strtok(b, " ,.!?;:");
     do {
         if (strstr(str,ss))
             {
                strcat(s,str);
                strcat(s," ");
             }
     } while (str = strtok(NULL," ,.!?;:"));
     std::cout<<s;
     return 0;
}
Добавлено через 5 минут
А нужно искать совпадение, даже если буквы в разном регистре?
1
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
25.11.2012, 22:44  [ТС]
Спасибо, но меня больше интересует вариант, где библиотечные ф - ии используются по минимуму. Хочу найти ошибки в своей программе, но пока в упор не вижу, что же всё - таки не так.
P.S. важное условие: буквы разного регистра неразличимы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2012, 22:44
Помогаю со студенческими работами здесь

Напечатать все возможные перестановки слов в предложении, разделив их одним пробелом
Задано предложение без предлогов, слова в котором разделены одним или несколькими пробелами. Напечатать все возможные перестановки слов в...

Вывести строку, содержащую слова исходной строки, разделенные одним пробелом, и расположенные по алфавиту
объясните пожалуйста, что делает каждая строка задача:Дана строка, состоящая из русских слов, набранных заглавными буквами и...

Напечатать в алфавитном порядке все слова из данной строки, имеющие заданную длину n
Здравстуйте, если не сложно помогите пожалуйста написать программу. Составить программу, которая будет вводить строку в переменную...

Напечатать в алфавитном порядке все слова из данной строки, имеющие заданную длину n
Всем доброго времени помогите пожалуйста выполнить задние через тип String и Класс StringBuilder: Дана строка. Напечатать в алфавитном...

Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n
Пожалуйста, напишите программу по следующей задаче: Дана строка . Напечатать в алфавитном порядке все слова из заданной строки,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru