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

Преобразовать полученный текст в набор строк, каждая из которых содержит целое количество слов и ее длинна не превышает 40 символов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удаление элементов из списка http://www.cyberforum.ru/cpp-beginners/thread977995.html
Создать список. Потом удалить из него все отрицательные элементы. Если можно с комментариями некоторых действий) кстати сдавать программу мне придется на листке бумаги, так что без сильных заморочек...
C++ Сформировать случайным образом массив X(N), элементами которого могут быть только 0 и 1. Проверить, существует ли строгое чередование 0 и 1 Помогите написать прогу C# Сформировать случайным образом массив X(N), элементами которого могут быть только 0 и 1. Проверить, существует ли строгое чередование 0 и 1. Использовать в программе... http://www.cyberforum.ru/cpp-beginners/thread977983.html
C++ Ошибка в ответе
{ int a,b,c,d,f,g,h; double e; printf("Vvedite chetyre chisla: "); scanf("%d%d%d%d",&a,&b,&c,&d); f=a+b; g=b-d; h=c*d; e=(a/c); printf("%d %d %d %lf",f,g,h,e);
При нажатии на бобра не увеличивается счет C++
В игре при нажатии на бобра должен увеличиваться счет (currentCounter), но он почему-то не увеличивается. struct C_Events { C_Events() : currentCounter(0) {} inline void countersIncrement() {...
C++ Конвертация Cstring в wchar_t* http://www.cyberforum.ru/cpp-beginners/thread977935.html
Есть функция, которая возвращает тип CString и нужно этот CString использовать в функции wcscpy. Как правильно сделать преобразования?
C++ В массиве заменить значения последних K положительных элементов на -1 Приветствую. Дан N-элементный одномерный массив M. В данном массиве заменить значения последних K положительных элементов на -1. Добавлено через 2 часа 1 минуту #include <iostream> #include... подробнее

Показать сообщение отдельно
kestugar
7 / 7 / 0
Регистрация: 15.05.2010
Сообщений: 184

Преобразовать полученный текст в набор строк, каждая из которых содержит целое количество слов и ее длинна не превышает 40 символов - C++

15.10.2013, 13:43. Просмотров 365. Ответов 2
Метки (Все метки)

Преобразовать полученный текст в набор строк, каждая из которых содержит целое
количество слов (слово должно целиком находиться в строке) и ее длинна не превышает
40 символов.

Подсказки:
• Для хранения всего входного текста можно использовать одну строку
• Можно создать строки содержащие символы принадлежащие какое либо категории,
например знаки препинания
• Для хранения результирующих строк можно использовать vector<string>

Алгоритм преобразования:
1)ищешь последний пробел в строке от 0-го до 40-го элемента,
2)копируешь подстроку с 0 эл-та. по пробел в i-й элемент вектора
3) удаляешь то что скопировал из строки.
и по новой, пока не кончится строка

1)pos_space = Str_File.find_last_of(" ", 0, 40); - выдает -1;
Помогите пожалуйста разобраться)

//Код функции "Чтение из файла."
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string Read_File(char* INPUT_FILE_NAME) {
    ifstream inFile_stream;
    string InputString, buf;
 
    inFile_stream.open(INPUT_FILE_NAME);
 
    if (inFile_stream) {    
        while (!inFile_stream.eof())
        {
            //inFile_stream.getline(buf, sizeof(buf));
            getline(inFile_stream, buf);
            InputString += buf; + ' ';
            //InputString += buf; + '\n';
        };
    }
    else
        InputString = "Error open file";
 
    return InputString;
}


//Код функции "форматирование текста."
Кликните здесь для просмотра всего текста

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
string Format_Text(string Str_File) {
    //string Punc_Arr(",.!?:;");
    //int number_start_word = 0;
    int size_word = 0;              //длинна слова.
    int i = 0;
 
    while(i <= Str_File.length()) {
    #pragma region 
        //Если элемент строки табуляция или конец строки, то удаляем его.
        if (Str_File[i] == '\t' || Str_File[i] == '\n') {
            Str_File.erase(i, 1);
            i--;
 
            //Меняем слова больше 10 букв на vau!!!
            if (size_word > 10) 
                Change_Word_More10_Char(Str_File, i, size_word);
 
            size_word = -1;                 //-1, т.к. в конце цикла size_word++.
        }
 
        //Если подряд 2 и более пробела, то удаляем его.
        else if (Str_File[i] == ' ') {
            if (Str_File[i+1] == ' ') {
                Str_File.erase(i+1, 1);
                //i--;
            }
 
            //Меняем слова больше 10 букв на vau!!!
            if (size_word > 10) 
                Change_Word_More10_Char(Str_File, i, size_word);
 
            size_word = -1;                 //-1, т.к. в конце цикла size_word++.
        }
 
        #pragma region Если элемент строки знак препинания.
        //else if (Str_File[i] >= Punc_Arr[0] && Str_File[i] <= Punc_Arr[Punc_Arr.length()]) {
        else if (Str_File[i] == ',' || Str_File[i] == '.' || Str_File[i] == '!' || 
                 Str_File[i] == '?' || Str_File[i] == ':' || Str_File[i] == ';')    {
            //Удаляем перед знаком препинания.
            if (Str_File[i-1] == ' ') {
                Str_File.erase(i-1, 1);
                i--;
            }
            //Вставляем после знака препинания.
            if (Str_File[i+1] != ' ') {
                //cout << "Str_File  [" << i << "] = " << Str_File[i] << endl;
                Str_File.insert(i+1, " ");
                //cout << "Str_File 2[" << i << "] = " << Str_File[i] << endl;
                i++;
                //cout << "Str_File 3[" << i << "] = " << Str_File[i] << endl;
            }
 
            //Меняем слова больше 10 букв на vau!!!
            if (size_word > 10) 
                Change_Word_More10_Char(Str_File, i, size_word);
 
            size_word = -1;                 //-1, т.к. в конце цикла size_word++.
        }
        #pragma endregion
        size_word++;
        i++;
        #pragma endregion
    }
    
    return Str_File;
}
 
//Замена слов больше 10 букв.
void Change_Word_More10_Char(string &Str_File, int &number_of_char, int size_word) {
    //находим начало слова.
    number_of_char = number_of_char - size_word;                
    Str_File.erase(number_of_char, size_word);
    Str_File.insert(number_of_char, "Vau!!!");
    //Переносим указатель на конец слова Vau!!!
    number_of_char = number_of_char + length_vau;
}


Основной код программы:
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
63
#include <conio.h>
#include <stdlib.h> 
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
 
using namespace std;
 
 
const int VECTOR_SIZE = 20;
const int ARRAY_SIZE = 10;
const int length_vau = 6;
 
char INPUT_FILE_NAME[] = "../../lab_2_string.txt";
 
string Read_File(char* FILE_NAME);
string Format_Text(string Str_File);
void Change_Word_More10_Char(string &Str_File, int &number_of_char, int size_word);
vector <string> Text_To_Vector(string &Str_File);
void Print_Vector(vector <string> &vect);
 
 
void main(void) { 
           //Str_File - строка, хранящая весь текст из текстового файла.
    string Str_File = Read_File(INPUT_FILE_NAME);
    cout << "In fopen_s: "<< endl << Str_File << endl;
    string Format_Str_File = Format_Text(Str_File);
    cout << "Format_Text: "<< endl << Format_Str_File << endl;
    vector <string> vect(VECTOR_SIZE);
    vect = Text_To_Vector(Str_File);
    cout << endl;
    Print_Vector(vect);
    system("pause");
 }
 
//Преобразовать полученный текст в набор строк, каждая из которых содержит целое количество слов 
//(слово должно целиком находиться в строке) и ее длинна не превышает 40 символов.
vector <string> Text_To_Vector(string &Str_File) {
    int i = 0;
    int number_vector = 0;
    int pos_space = 0;
    vector <string> vect(VECTOR_SIZE);
    cout << " ===vector <string> Text_To_Vector(string Str_File)=== " << vect[i] << endl;
    //cout << " Str_File [40]= " << Str_File[40] << endl;
 
    while(Str_File[i] != '\0') {
        pos_space = Str_File.find_last_of(" ", 0, 40);
        vect[number_vector] = Str_File.substr(i, pos_space);
        Str_File.erase(i, pos_space);
        i = 0;
        number_vector++;
    }
    return vect;
}
 
 
//Вывод вектора на экран.
void Print_Vector(vector <string> &vect) {
    for (int i = 0; i < vect.size(); i++)
        cout<<"vect["<<i<<"] = "<<vect[i]<<endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru