Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
1

Замена нужных слов в файле

06.10.2015, 17:52. Показов 827. Ответов 8
Метки нет (Все метки)

Дан файл. Предложить пользователю ввести номер слова, которое он хочет заменить точками(.), вывести на экран измененный текст файла. Не использовать ф-цию strtok, т.к она уничтожает предложение после подсчета и вывести текст на экран не получится

Могу предоставить код, в котором можно заменять индексы массива, под которыми стоят символы на звездочки в цикле for.
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
 
    size_t count = 0; //Число символов в файле
    char S; //для подсчета символов
    int numberOfWords = 0;
 
    ifstream f("C:\\TXT.txt");
 
    /*Подсчет символов в тексте для создания динамического массива, в который
    будет записан текст файла для далнейшей работы с ним*/
 
    while (!f.eof())//цикл подсчета символов в файле
    {
        f.get(S);//записываем в переменную S текст посимвольно
        count++;//кол-во символов
    }
    f.close();//закрываем файл
 
    /*Добавляем текст в переменную*/
 
    char *S2 = new char[count]; //Выделяем память по определенному числу символов
    for (int i = 0; i<count; i++) 
        S2[i] = NULL; //Очищаем строку от хлама
    ifstream f2("C:\\TXT.txt");  //создаем поток для работы с файлом
    int i = 0; // курос на на текущий символ (как номер буквы в слове)
 
    while (!f2.eof()) //Проходим по файлу
    {
        f2.get(S2[i]); //Записываем символ за символом 
        i++; //передвинули курсор для записи следующего символа
    }
 
    
    for (int i = 0; i < 9; i++)//Цикл, с помощью которого закрываем звездочками слова
        S2[i] = '*';//сама замена символов звездочками, нужных нам индексов
    
 
    f2.close(); //закрываем файл
    cout << S2 << endl; //Вывод переменной уже с записанным в нее текстом
    cout << endl << numberOfWords;
    delete[]S2; //освобождаем память
 
    cin.get();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2015, 17:52
Ответы с готовыми решениями:

Замена слов в файле
Помогите плиз.Как реализовать данную программу?: В первом файле находиться текст.Второй файл...

Замена слов в файле
Помогите, пожалуйста, исправить код. Нужно : 1. Чтобы замена производилась независимо от...

Замена слов в файле звездочками
Задача: заменить последние слова в предложениях. Вот текст самого файла : Когда-то (помню с...

Замена слов в текстовом файле
Нужна помощь, как в текстовом файле изменить слово, например, &quot;Black&quot; на &quot;White&quot;?

8
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
06.10.2015, 18:29 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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
 
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
 
    size_t count = 0; //Число символов в файле
 
    size_t n;
    cin >> n; // номер слова
 
    ifstream f("C:\\TXT.txt");
 
    /*Подсчет символов в тексте для создания динамического массива, в который
    будет записан текст файла для далнейшей работы с ним*/
 
    //цикл подсчета символов в файле
    while (f.get() != EOF) ++count; //кол-во символов
 
    /*Добавляем текст в переменную*/
 
    char *S2 = new char[count + 1]; //Выделяем память по определенному числу символов
 
    f.clear();
    f.seekg(0);
 
    f.get(S2, count, '\0');
    f.close(); //закрываем файл
 
    size_t pos = 0;
    for (size_t i = 0, d = 0; i < count && d < n - 1;) // цикл подсчета слов
    {
        if (ispunct(S2[i]) || isspace(S2[i]))
        {
            ++d;
            ++i;
            while (i < count && (ispunct(S2[i]) || isspace(S2[i]))) ++i;
            pos = i;
        }
        else ++i;
    }
    
    while (pos < count && !ispunct(S2[pos]) && !isspace(S2[i])) S2[pos] = '.';
 
    cout << S2 << endl; //Вывод переменной уже с записанным в нее текстом
    delete[]S2; //освобождаем память
 
    cin.get();
    return 0;
}
0
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
06.10.2015, 18:33  [ТС] 3
На 49 строке ошибка: i: необъявленный идентификатор
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
06.10.2015, 18:38 4
C++
1
while (pos < count && !ispunct(S2[pos]) && !isspace(S2[pos])) S2[pos++] = '.';
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
06.10.2015, 18:43  [ТС] 5
Выдает это окно, после ввода значения n
0
Миниатюры
Замена нужных слов в файле  
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
06.10.2015, 18:47 6
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 "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
 
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
 
    size_t count = 0; //Число символов в файле
 
    size_t n;
    cin >> n; // номер слова
 
    ifstream f("C:\\TXT.txt");
 
    /*Подсчет символов в тексте для создания динамического массива, в который
    будет записан текст файла для далнейшей работы с ним*/
 
    //цикл подсчета символов в файле
    while (f.get() != EOF) ++count; //кол-во символов
 
    /*Добавляем текст в переменную*/
 
    char *S2 = new char[count + 1]; //Выделяем память по определенному числу символов
 
    f.clear();
    f.seekg(0);
 
    f.get(S2, count, '\0');
    f.close(); //закрываем файл
 
    size_t pos = 0;
    for (size_t i = 0, d = 0; i < count && d < n - 1;) // цикл подсчета слов
    {
        if (ispunct(static_cast<unsigned char>(S2[i])) || isspace(static_cast<unsigned char>(S2[i])))
        {
            ++d;
            ++i;
            while (i < count && (ispunct(static_cast<unsigned char>(S2[i])) || isspace(static_cast<unsigned char>(S2[i])))) ++i;
            pos = i;
        }
        else ++i;
    }
    
    while (pos < count && !ispunct(static_cast<unsigned char>(S2[pos])) && !isspace(static_cast<unsigned char>(S2[pos]))) S2[pos++] = '.';
 
    cout << S2 << endl; //Вывод переменной уже с записанным в нее текстом
    delete[]S2; //освобождаем память
 
    cin.get();
    return 0;
}
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
06.10.2015, 18:49  [ТС] 7
Все работает, спасибо). А в чем была проблема, когда программа не работала ?
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
06.10.2015, 18:50 8
В неправильной конвертации char -> int.
0
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
06.10.2015, 18:54  [ТС] 9
Спасибо. Ваши знания языка поражают, бьюсь над этой задачей около часа, но ответ так в голову и не приходил, а Вы написали код минут за 5 . Еще раз спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2015, 18:54

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Поиск и замена слов в файле txt
Как заменить и найти слова в файле txt на С++. То есть есть файл вот такой структуры AAA БББ...

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

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов...


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

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

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