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

Заменить все вхождения одного слова на другое - C++

Восстановить пароль Регистрация
 
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
01.10.2013, 19:39     Заменить все вхождения одного слова на другое #1
Задание: считать из файла строки, заменить все вхождения одного слова на другое. В консоль: input, output, hello, bay. - заменить в файле input все слова hello на bay и записать в output. Что делаю не так? Подскажите пожалуйста

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
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
void replace(std::string text, const std::string& from, const std::string& to)
{
    for (size_t i = 0; (i = text.find(from, i)) != std::string::npos; i += to.length())
        text.replace(i, from.length(), to);
 
}
 
int main(int argc, char** argv){
#include <fstream>
    FILE *input;
    FILE *output;
    int Argument_input = 2;
    int Argument_output = 3;
    int Argument_what = 4;
    int Argument_replac = 5;
   // std::string str;
    char *str;
 
 
    if (argc < 4){
        cout << "Неккоректно введены данные\n";
        return 0;
    }
 
    if ((input = fopen(argv[Argument_input], "rb")) == NULL){
        cout << "Файл не открыт на чтение\n";
        return 0 ;
    }
 
    if ((output = fopen(argv[Argument_output], "wb")) == NULL){
        cout << "Файл не открыт на запись\n";
        return 0;
    }
 
    while(!feof(input)){
 
            fscanf(input, "%256[^\n]", str);
            string str1 = str;// =  static_cast<string>(str);
 
    int i = 0;
 
     while(str[i] != '\n'){
            replace(str1, argv[Argument_what], argv[Argument_replac]);
            i++;
          //  string s;
           // s.append(str1);
            fwrite(str1.c_str(), sizeof(string), sizeof(str1), output);
 
        }
 
    }
 
 
 
    return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2013, 19:39     Заменить все вхождения одного слова на другое
Посмотрите здесь:

Замена одного слова на другое в массиве строк С++ C++
Как в переменной строкового типа заменить все вхождения одного символа на другой? C++
C++ Проверьте, можно ли вычеркиванием букв из одного слова получить другое
Заменить все вхождения первого слова на второе C++
C++ Определить, можно ли из букв одного слова составить другое
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2013, 20:08     Заменить все вхождения одного слова на другое #2
Цитата Сообщение от proger123 Посмотреть сообщение
Что делаю не так?
Вот это:
C++
1
fwrite(str1.c_str(), sizeof(string), sizeof(str1), output);
И зачем здесь, вообще, бинарный режим потребовался?
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
01.10.2013, 20:34  [ТС]     Заменить все вхождения одного слова на другое #3
А как тогда переделать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2013, 21:02     Заменить все вхождения одного слова на другое #4
Цитата Сообщение от proger123 Посмотреть сообщение
А как тогда переделать?
fputs().
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
01.10.2013, 21:41  [ТС]     Заменить все вхождения одного слова на другое #5
как преобразовать string в char*?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2013, 21:47     Заменить все вхождения одного слова на другое #6
Цитата Сообщение от proger123 Посмотреть сообщение
как преобразовать string в char*?
Вот здесь же это делается:
C++
1
fwrite(str1.c_str(), sizeof(string), sizeof(str1), output);
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
02.10.2013, 08:13  [ТС]     Заменить все вхождения одного слова на другое #7
Исправлено! Но пишет два предупреждения и при запуске - ошибка сегментирования (дамп памяти). Что делать?
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
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
 
string replace(std::string text, const std::string& from, const std::string& to)
{
    for (size_t i = 0; (i = text.find(from, i)) != std::string::npos; i += to.length())
        text.replace(i, from.length(), to);
 
        cout << text;
 
    return text;
}
 
int main(int argc, char** argv){
 
    FILE *input;
    FILE *output;
    int Argument_input = 2;
    int Argument_output = 3;
    int Argument_what = 4;
    int Argument_replac = 5;
   // std::string str;
    char *str;
 
 
    if (argc < 4){
        cout << "Неккоректно введены данные\n";
        return 0;
    }
 
    if ((input = fopen(argv[Argument_input], "rb")) == NULL){
        cout << "Файл не открыт на чтение\n";
        return 0 ;
    }
 
    if ((output = fopen(argv[Argument_output], "wb")) == NULL){
        cout << "Файл не открыт на запись\n";
        return 0;
    }
 
    while(!feof(input)){
 
            fscanf(input, "%255[^\n]", str);
            std::string str1(str);
 
        int i = 0;
        while(str[i] != '\n'){
            replace(str1, argv[Argument_what], argv[Argument_replac]);
            i++;
 
            fprintf(output, str1.c_str());
 
        }
 
    }
 
 
 
    return 0;
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2013, 19:13     Заменить все вхождения одного слова на другое
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2013, 19:13     Заменить все вхождения одного слова на другое #8
Вот это зачем сделали?
C++
1
2
// std::string str;
char *str;
Указатель объявлили, а память выделить?
Yandex
Объявления
02.10.2013, 19:13     Заменить все вхождения одного слова на другое
Ответ Создать тему
Опции темы

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