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

Работа с многострочным текстом(введенным из консоли) - C++

Восстановить пароль Регистрация
 
abogdan
Сообщений: n/a
04.04.2014, 21:40     Работа с многострочным текстом(введенным из консоли) #1
Имеется условие:
С клавиатуры вводится многострочный текст. Оставить в тексте
только первые вхождения каждой буквы, остальные – удалить.
Вывести слова полученного текста, которые начинаются и заканчиваются одной и той же буквой.

И работоспособный код:
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
#include <stdio.h>
#include <cstring>
 
#define MAX 100
#define LEN 80
 
char text[MAX][LEN];
int t, i, j;
 
int main(void)
{
    printf("Введите текст, затем нажмите клавишу <Enter>: \n");
 
    for (t = 0; t < MAX; t++) {
        fgets(text[t], LEN, stdin);
        if(*text[t] == '\n') break;
    }
 
    printf("Введенный текст: \n");
 
    for (i = 0; i < t; i++) {
        for (j = 0; text[i][j]; j++) {
            putchar(text[i][j]);
        }
    }
 
    return 0;
}
Который правильно(IMHO) вводит/выводит многострочный текст для дальнейшей обработки.

Проблема заключается в том, что у меня не выходит корректно с ним работать(удалять символы, например).
Идея была такова: создавал массив char'ов alphabet содержащий в себе все строчные и заглавные буквы русского и английского алфавитов и, перебирая text искал вхождения(при первом вхождении буквы она удалялась из alphabet, а в последующих случаях, при ее отсутствии в оном, из text[i]).
Логику вроде объяснил.
Так вот, при попытке компиляции компилятор(g++) посыпался ошибками вроде "несовместимости char* и char" и начал говорить будто он понятия не имеет о типе переменных в text[i]. Пришлось все, кроме кода выше удалить.
Вопрос таков: как лучше(и, по возможности, правильнее и проще) работать с переменной text(перебирать, удалять символы)?
PS:Извиняюсь за длинное вступление.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 21:40     Работа с многострочным текстом(введенным из консоли)
Посмотрите здесь:

C++ работа с текстом
Работа с текстом C++
работа с текстом C++
C++ Работа с текстом
C++ Работа с текстом
Управление текстом и цветом к консоли C++
C++ Работа с массивом (заменить элементы ПОБОЧНОЙ диагонали целым числом , введенным пользователем)
C++ Текстовой файл с уже введенным текстом зашифровать и вывести уже зашифрованный

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
04.04.2014, 22:33     Работа с многострочным текстом(введенным из консоли) #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
61
62
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include "conio.h"
#include <locale>
#include <set>
using namespace std;
 
 
 
int main()
{   
    setlocale(LC_ALL, "Russian");
    ifstream file_in("d:\\cpp_test\\input_text.txt");
    vector<string> str_vec;
    while(file_in)
    {
        string str;
        getline(file_in,str);
        str_vec.push_back(str);
    }
    vector<string>::iterator it = str_vec.begin();
    while(it!=str_vec.end())
    cout << *it++ << endl; 
 
    vector<string> vxv;
    vector<string> processed(str_vec.size());
    vector<string>::iterator processed_it = processed.begin();
    for(it = str_vec.begin();it!=str_vec.end(); ++it, ++processed_it)
    {
        set<char> symbols;
        size_t iSetSize = symbols.size();
        string current_word;
        istringstream string_in(*it);
        while(string_in >> current_word)
        {
            if(*(current_word.begin())==*(current_word.end()-1))
            vxv.push_back(current_word);
            for(string::iterator word_it = current_word.begin(); word_it!=current_word.end();++word_it)
            {
                symbols.insert(*word_it);
                if(symbols.size() > iSetSize)
                    processed_it->push_back(*word_it);
                iSetSize = symbols.size();
            }
            processed_it->push_back(' ');
            processed_it->push_back('\0');
        }
    }
    ofstream file_out("d:\\cpp_test\\output_text.txt");
    for (vector<string>::iterator processed_it = processed.begin();processed_it!=processed.end();++processed_it)
        file_out << *processed_it << endl;
    file_out << endl;
    for (vector<string>::iterator vxv_it = vxv.begin();vxv_it!=vxv.end();++vxv_it)
        file_out << *vxv_it << endl;
    _getch();
    return 0;
    
}
Yandex
Объявления
04.04.2014, 22:33     Работа с многострочным текстом(введенным из консоли)
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru