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

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

Восстановить пароль Регистрация
 
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
12.06.2011, 21:47     Выполнить обработку текста #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
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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fghjkl
6 / 6 / 1
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 21:53     Выполнить обработку текста #2
Мне кажется, что это из-за того, что i=1
C++
1
for (i=1; i<str2.length(); i++)
, потому и нулевой символ не записывается в строку 2.
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
12.06.2011, 21:54  [ТС]     Выполнить обработку текста #3
Это понятно) но при исправления получается что выходит за приделы строки. Помогите пожалуйста это исправить.
Fghjkl
6 / 6 / 1
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 22:01     Выполнить обработку текста #4
Мне кажется нулевой символ обеих строк не участвует. Я думаю надо использовать идентификаторы [i-1] вместо [i].
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
12.06.2011, 22:06  [ТС]     Выполнить обработку текста #5
АААААА.... Пожалуйста, помогите... Очень нужно

Добавлено через 4 минуты
Цитата Сообщение от Fghjkl Посмотреть сообщение
Мне кажется нулевой символ обеих строк не участвует. Я думаю надо использовать идентификаторы [i-1] вместо [i].
Тогда это нарушит работу алгоритма.
Fghjkl
6 / 6 / 1
Регистрация: 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++)
- и здесь границы включил.
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
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-ую длину то неработает
Fghjkl
6 / 6 / 1
Регистрация: 04.06.2011
Сообщений: 10
12.06.2011, 22:18     Выполнить обработку текста #8
Ну тогда лучше условие проверки длины строки вставить?
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
12.06.2011, 23:09  [ТС]     Выполнить обработку текста #9
Не получается, удаляет последний символ(((((
ПОМОГИТЕ!!!!!!!!!
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
12.06.2011, 23:12     Выполнить обработку текста #10
может так(не смотрел ваш код)
C++
1
for (i=0; i<=str1.length()-1; i++)
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
12.06.2011, 23:26  [ТС]     Выполнить обработку текста #11
да ладно... закрыли тему...
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
12.06.2011, 23:29     Выполнить обработку текста #12
проблема то решена?
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
12.06.2011, 23:36  [ТС]     Выполнить обработку текста #13
Нет.
Вы откомпилируйте... и увидите, что программа не будет корректно работать:
проблемы которые возникают:
1.удаляет первый символ строки
2.удаляет последний символ строки
3. выход за приделы строки
4.не удаляет все пробелы(оставляет в конце строки)
5.проблемы с пустыми строчками
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
12.06.2011, 23:42     Выполнить обработку текста #14
лан ща попробую в вижал студио че нить помутить

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

Добавлено через 43 секунды
и можно пример содержания 1.txt
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
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
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
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;
}
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
13.06.2011, 00:35  [ТС]     Выполнить обработку текста #17
Спасибо за попытку)))
Скорее всего нужно будет переделать алгоритм. Сам мучался с этим кодом, и ничего не получилось. Ладно завтра буду писать альтернативный код))

Добавлено через 4 минуты
Если чесно, то это друг попросил помочь исправить ошибку... После долгих мучений решил спросить на форуме))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2011, 08:43     Выполнить обработку текста
Еще ссылки по теме:

C++ Выполнить статистику текста: подсчитать количество букв, знаков препинания, слов, предложений, абзацев.
C++ Задача на обработку
C++ Создать файл («БД») и выполнить его обработку

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 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;
}
Правда всякую ересь вроде !!! считать за слова будет, но это несложно исправить.
Yandex
Объявления
13.06.2011, 08:43     Выполнить обработку текста
Ответ Создать тему
Опции темы

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