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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
#1

Поиск в тексте - C++

13.07.2010, 22:28. Просмотров 588. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста
В файле имеется текст.
Найти отсутствие пробелов после точки в конце предложения, исправить ошибки и сохранить файл.
Предложением считать часть текста, что кончается "." или начинается с нового рядка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2010, 22:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск в тексте (C++):

Поиск и оптимизация в тексте. - C++
Очень нужна ваша помощь. Суть задания такова. Имеется текстовый файл, мы должны считать с него слова в вектор, и сделать множество...

Поиск слова в тексте - C++
: 58 Вчера, 23:03 Поиск слова в тексте #1 (permalink) В текстовом файле fin.txt находится текст на русском языке. С клавиатуры...

Поиск словосочетания в тексте - C++
Доброго времени суток! Смог решить такую задачу, как нахождение слова в тексте и вывод его посимвольно, решил усложнить задачу и вывести...

Поиск слова в тексте. - C++
Дан текстовый файл с расширением txt. В нем очень много слов с определениями. Слово и его определение записано в одну строку. Пример:...

Поиск букв в тексте - C++
Разработать программу, которая вводит текст и букву и определяет слово (слова), содержащее наибольшее количество указанных букв. (заранее...

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

9
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
14.07.2010, 02:29 #2
landan, C аль C++?

Добавлено через 46 минут
или начинается с нового рядка Но как после этого могут идти пробелы? оО

Добавлено через 46 минут
Что-то пытался... Не слишком качественно вышло... После точки удаляет пробелы... В других случаях не всегда...

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    FILE*f=fopen("Read.txt", "r");
    if(!f)
    {
        printf("Can`t open file\n");
        exit(1);
    }
    char Str[255][255];
    int Col_str=0;
    int i=0;
    while(!feof(f))
    {
        fgets(Str[i], 255, f);
        Col_str++;
        i++;
    }
    i=0;
    //printf("%s\n", Str[i]);
    for(int j=0;j<strlen(Str[i]);j++)
            {
                if(Str[i][j]=='.')
                {
                    if(Str[i][j+1]==' ')
                    {
                        //Str[i][j+1]='\n';
                        Str[i][j+1]='\0';
                    }
                }
                if(Str[i][j+1]=='\0')
                {
                    //fprintf(f,"\n");
                    i++;
                    if(i>=Col_str)
                        break;
                    j=0;
                    if(Str[i][j]==' ')
                        for(int j=0;j<strlen(Str[i]);j++)
                            Str[i][j]=Str[i][j+1];
                }
            }
        //printf("%s\n", Str[i]);
    fclose(f);
        f=fopen("Read.txt", "w");
        if(!f)
        {
            printf("Can` open file\n");
            exit(1);
        }
        for(int i=0;i<Col_str;i++)
            fprintf(f, "%s\n", Str[i]);
    return 0;
}
1
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
14.07.2010, 03:24 #3
можно попроще с заменой файла
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
#include <cstdlib>
#include <fstream>
using namespace std;
int main()
{
    ifstream in("input.txt");
    ofstream out("output.txt");
    char c;
    while (!in.eof())
    {
         in.get(c);
         if (c=='.')
         {
             out.put('.');
             in.get(c);
             if (c != ' ') out.put(' ');
             out.put(c);
         }
         else out.put(c);
     }
     in.close();
     out.close();
     remove("input.txt");
     rename("output.txt","input.txt");
     return 0;
}
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
14.07.2010, 03:56 #4
Хотя нет. Это чудо и правда работает. Если я конечно правильно понял условия. Пробелы после точки удаляет. Пробелы в начале строки удаляет.

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
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <fstream>
#include <cstring>
int main()
{
    std::vector<std::string> BaseStringArr;
    std::string BaseString;
    std::ifstream f;
    int count_spaces=0;
    f.open("Read.txt");
    if(!f)
    {
        std::cerr<<"Error. Can`t open file\n";
        exit(1);
    }
    while(!f.eof())
    {
        std::getline(f, BaseString);
        std::string::size_type index=BaseString.find_first_of('.');
        if(index!=std::string::npos)
            BaseString.erase(index+1);
        for(size_t i=0;i!=BaseString.size();i++)
        {
            if(BaseString[i]==' ')
                count_spaces++;
            if(isalpha(BaseString[i]))
                break;
        }
        BaseString.erase(0, count_spaces);
        BaseStringArr.push_back(BaseString);
    }
    for(size_t i=0;i<BaseStringArr.size();i++)
    {
        std::cout<<BaseStringArr[i]<<'\n';
    }
    f.close();
    std::ofstream file;
    file.open("Read.txt");
    if(!file)
    {
        std::cerr<<"Error. Can`t open file\n";
        exit(1);
    }
    for(size_t i=0;i<BaseStringArr.size();i++)
    {
        file<<BaseStringArr[i]<<'\n';
    }
        file.close();
    return 0;
}
Добавлено через 11 минут
Не могу понять почему он постоянно пишет в файле еще одну строку полностью пустую...
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
14.07.2010, 04:15 #5
Lavroff, вот почему:
C++
1
2
3
4
        for(size_t i=0;i<BaseStringArr.size();i++)
        {
                file<<BaseStringArr[i]<<'\n';
        }
во время последней итерации пренос строки заносится в файл.
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
14.07.2010, 05:24 #6
Aye Aye, Верю. Я это понял) Как исправить?) Если без '\n' хреново получается. В другой файл писать?
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
14.07.2010, 06:12 #7
что угнодно можно сделать, хоть:
C++
1
2
3
4
5
       for(size_t i=0;i<BaseStringArr.size() - 1;i++)
        {
                file<<BaseStringArr[i]<<'\n';
        }
        file<<BaseStringArr[BaseStringArr.size()-1];
я думаю '\n' это не важно. Кстати, решать задачу сразу переписаывая все в другой файл, кажется мне приемлимым, ибо в ином случаи расходуется больше ресурсов.
0
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
14.07.2010, 14:47  [ТС] #8
вы меня наверное не правильно поняли, програма должна не удалять пробел а наоборот, делать пробел после точки если его там нет. предложением считать часть текста, которая кончается точкой или символоп перехода на новою строку

писать на си

Добавлено через 1 час 32 минуты
Aye Aye, ваша програма отлично работает, только я не пойму, зачем output.txt ?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
14.07.2010, 15:37 #9
landan, Ох елки палки. Точно. Прошу прощения.
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
16.07.2010, 01:11 #10
landan, это результат работы программы, в этот файл записывается "переделанный" исходный файл, затем исоходный файла, без палева, удаляется и этот новый файл переименовывается в соответствии с именем старого на чистом Си все выглядит примерно также. и забыл о том, что конец строки тоже полагается учитывать, ну тут уж сам как-нибудь...
0
16.07.2010, 01:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2010, 01:11
Привет! Вот еще темы с ответами:

Поиск букв в тексте - C++
Добрый вечер! Очень надеюсь на вашу помощь, у самого никак не получаеться решить следущую задачку для C++ &quot;Распечатать в порядке,...

Поиск слов в тексте - C++
всем добрый вечер помогите написать програмку кторая будет искать одинаковые слова в тексте(например будет октябрь сентябрь октябрь декабрь...

Поиск слова в тексте - C++
Составить алгоритм поиска заданного слова в тексте. Слово и текст являются массивами символов заданной длины. Если заданное слово...

Поиск слов в тексте - C++
Здравствуйте, передо мной стоит задача нахождения количества гласных букв, общее количество букв, количества строк, количество знаков...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru