Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
1

Выполнить обработку текста

12.06.2011, 21:47. Показов 1146. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья, помогите пожалуйста:
Выполнить обработку текста из внешнего текстового файла, созданного в редакторе. Результаты обработки поместить во внешний файл.Определить количество слов в каждой строке, сжать каждую строку, удалив все лишние пробелы.
Вот я сделал, только эта программа при записи в другой файл, удаляет первые символы строк.
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
#include "StdAfx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
int a,b,c;
string str1, str2;
ifstream file("C:/1.txt");
ofstream fileout("C:/2.txt");
int i;
int main()
{
    setlocale (LC_CTYPE,"rus");
    b=1;
    while(!file.eof())
    { 
        str2="";
        str1="";
        getline(file, str1); 
        for (i=1; i<str1.length(); i++)
        {
            if(str1[i]!=' ') str2=str2+str1[i]; 
            if(((str1[i]==' ')&&(str1[i-1])!=' ')) str2=str2+' '; 
            }
    a=1;
     for (i=1; i<str2.length(); i++)
 
    if((str2[i]!=' ')&&(str2[i-1]==' ')) a++;
 
     if (str2.length()==0) a=0;
    cout<<"В "<<b<<"  строке "<<a<<"  слов"<<endl;
    b++;
    fileout<<str2<<endl;
    };
getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2011, 21:47
Ответы с готовыми решениями:

Выполнить обработку массива используя указатели
Добрый вечер) Помогите пожалуйста Как должна выглядеть данная программа с указателями #include...

Создать файл («БД») и выполнить его обработку
Формат данных: Поиск в базе данных вида «Фамилия, имя, группа, дата рождения, средний рейтинг» всех...

Выполнить обработку элементов массива по заданному правилу
Дан линейный вещественный массив a найти : 1.(a1-an)(a2-a(n-1))...(an-a1)...

Выполнить обработку элементов прямоугольной матрицы А, имеющей N и М столбцов
Выполнить обработку элементов прямоугольной матрицы А, имеющей N и М столбцов. Добавить к элементам...

17
6 / 6 / 2
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 21:53 2
Мне кажется, что это из-за того, что i=1
C++
1
for (i=1; i<str2.length(); i++)
, потому и нулевой символ не записывается в строку 2.
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 21:54  [ТС] 3
Это понятно) но при исправления получается что выходит за приделы строки. Помогите пожалуйста это исправить.
0
6 / 6 / 2
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 22:01 4
Мне кажется нулевой символ обеих строк не участвует. Я думаю надо использовать идентификаторы [i-1] вместо [i].
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 22:06  [ТС] 5
АААААА.... Пожалуйста, помогите... Очень нужно

Добавлено через 4 минуты
Цитата Сообщение от Fghjkl Посмотреть сообщение
Мне кажется нулевой символ обеих строк не участвует. Я думаю надо использовать идентификаторы [i-1] вместо [i].
Тогда это нарушит работу алгоритма.
0
6 / 6 / 2
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 22:14 6
C
1
if(str1[i-1]!=' ') str2=str2+str1[i-1];
Я вот тут так сделал и вроде все работает. На одной строке точно.
C
1
for (i=1; i<=str1.length(); i++)
- и здесь границы включил.
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 22:16  [ТС] 7
Цитата Сообщение от Fghjkl Посмотреть сообщение
C
1
if(str1[i-1]!=' ') str2=str2+str1[i-1];
Я вот тут так сделал и вроде все работает. На одной строке точно.
C
1
for (i=1; i<=str1.length(); i++)
- и здесь границы включил.
но тогда если строка имеет 0-ую длину то неработает
0
6 / 6 / 2
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 22:18 8
Ну тогда лучше условие проверки длины строки вставить?
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 23:09  [ТС] 9
Не получается, удаляет последний символ(((((
ПОМОГИТЕ!!!!!!!!!
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.06.2011, 23:12 10
может так(не смотрел ваш код)
C++
1
for (i=0; i<=str1.length()-1; i++)
0
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 23:26  [ТС] 11
да ладно... закрыли тему...
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.06.2011, 23:29 12
проблема то решена?
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 23:36  [ТС] 13
Нет.
Вы откомпилируйте... и увидите, что программа не будет корректно работать:
проблемы которые возникают:
1.удаляет первый символ строки
2.удаляет последний символ строки
3. выход за приделы строки
4.не удаляет все пробелы(оставляет в конце строки)
5.проблемы с пустыми строчками
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
12.06.2011, 23:42 14
лан ща попробую в вижал студио че нить помутить

Добавлено через 48 секунд
Цитата Сообщение от sannee Посмотреть сообщение
"StdAfx.h"
что это за библиотека

Добавлено через 43 секунды
и можно пример содержания 1.txt
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
12.06.2011, 23:48  [ТС] 15
Это библиотека по моему для предварительного компилирования заголовков
не обязательна

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
fdhkljhhlkdjhflkdsjlkfjdsfsdf sdkfhdklsfh kldsfhlkdshflkdshflk fdlkhlkfshflkds
     
fdhkljhhlkdjhflkdsjlkfjdsfsdf sdkfhdklsfh kldsfhlkdshflkdshflk fdlkhlkfshflkds
       
fdhkljhhlkdjhflkdsjlkfjdsfsdf sdkfhdklsfh kldsfhlkdshflkdshflk fdlkhlkfshflkds
    fdgf           fdgf 
fdhkljhhlkdjhflkdsjlkfjdsfsdf sdkfhdklsfh kldsfhlkdshflkdshflk fdlkhlkfshflkds
 
fdhkljhhlkdjhflkdsjlkfjdsfsdf sdkfhdklsfh kldsfhlkdshflkdshflk fdlkhlkfshflkds
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
13.06.2011, 00:26 16
вообщем переписал код как мне показалось удобнее(долго пытался исправить вашу ошибку-так и не смог)
вроде работает

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
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
string str1, str2;
ifstream file("C:/1.txt");
ofstream fileout("C:/2.txt");
 
int main()
{
    setlocale (LC_CTYPE,"rus");
    int b=1;
    while(!file.eof())
    { 
        str2="";
        str1="";
        getline(file, str1); 
        for (int i=0; i<str1.length(); i++)
        {
            if(!i)
                str2+=str1[i]; 
            else
                if(!((str1[i]==' ')&&(str1[i-1])==' ')) 
                    if(!((i==str1.length()) && (str1[i]==' ')))
                        str2+=str1[i]; 
        }
        int a=1;
        for (int i=0; i<str2.length(); i++)
        {
            if(str2[i]==' ')
                a++;
            if(str2.length()==0)
                a=0;
        }
                
        
        cout<<"В "<<b<<"  строке "<<a<<"  слов"<<endl;
       
        fileout<<str2<<endl;
        b++;
     }
getch();
return 0;
}
1
Просто хороший человек
391 / 181 / 24
Регистрация: 26.04.2011
Сообщений: 434
13.06.2011, 00:35  [ТС] 17
Спасибо за попытку)))
Скорее всего нужно будет переделать алгоритм. Сам мучался с этим кодом, и ничего не получилось. Ладно завтра буду писать альтернативный код))

Добавлено через 4 минуты
Если чесно, то это друг попросил помочь исправить ошибку... После долгих мучений решил спросить на форуме))
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.06.2011, 08:43 18
Через STL примерно так получится =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <sstream>
#include <fstream>
int main(){
    std::ifstream in("input.txt");
    std::ofstream out("output.txt");
    for(std::string line; std::getline(in,line);){
        std::stringstream sst;
        sst << line;
        unsigned count = 0;
        while (sst >> line){
            count++;
            out << line << ' ';
        }
        if (count) out << "( " << count << " words )\n";
    }
    return 0;
}
Правда всякую ересь вроде !!! считать за слова будет, но это несложно исправить.
1
13.06.2011, 08:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2011, 08:43
Помогаю со студенческими работами здесь

Предусмотреть в программе просмотр бинарного файла и выполнить его обработку
Имеется информация о телевизорах на складе: наименование, фирма изготовитель, стоимость, размер...

Задача на обработку текста (sos)
Задана фраза - последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 букв;...

Выполнить числовую обработку
Доброго времени суток! По логическому программированию задали 4 задания, а я не очень разобрался в...

Выполнить обработку массива записей
Задача. Программу оформить через меню. Определить эффективность алгоритма каждой...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru