Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла. http://www.cyberforum.ru/cpp-beginners/thread708331.html
1. Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла. на C++
C++ Массивы. Задан массив,содержащий несколько нулевых элементов. Сжать его выбросив эти элементы. Задан массив,содержащий несколько нулевых элементов. Сжать его выбросив эти элементы. http://www.cyberforum.ru/cpp-beginners/thread708328.html
Вывести те из введённых с клавиатуры чисел, которые состоят только из одинаковых цифр C++
Доброго времени суток! Программа вводит n положительных чисел. Вывести числа которые состоят только из одинаковых цифр. Например, дляоследовательности чисел: 123,5,333,144,44 ответ 3. Заранее спасибо.
Различие в записи. C++
Занимаюсь по урокам на сайте. Человек пишет просто для людей и понятно, но иногда что-то упускает. Вот вопрос: Чем отличается String name от int name Если я правильно понял, то int используется для числовых массивов, а string для буквенных. Это так? Если не так, то исправьте, пожалуйста!
C++ Соединить четыре программы http://www.cyberforum.ru/cpp-beginners/thread708313.html
Пишу калькулятор больших чисел. (+, -, /, *). Все эти действия уже написаны и работают, вот только надо создать единую программу. Создать типа менюшки, для выбора действия. Можно через CASE, как вам удобно. Сложение: #include <stdio.h> #include <string.h> #include <stdlib.h> void vvod(char *ar, int &n);
C++ Передача вектора в функцию void foo(vector<int> x) { //Тело функции } void foo(vector<int> &x) { //Тело функции } Пишут что в первой записи все вносимые в вектор изменения не сохраняются. Получается при такой записи создается полная копия вектора? Или там действуют какие-то другие механизмы? подробнее

Показать сообщение отдельно
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181

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

25.11.2012, 12:26. Просмотров 477. Ответов 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;
}
Подскажите, что нужно подправить? Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru