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

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

Войти
Регистрация
Восстановить пароль
 
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
#1

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

01.10.2013, 19:39. Просмотров 971. Ответов 7
Метки нет (Все метки)

Задание: считать из файла строки, заменить все вхождения одного слова на другое. В консоль: 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;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2013, 19:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заменить все вхождения одного слова на другое (C++):

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

Ввести строку и два слова, заменить все вхождения первого слова на второе - C++
Возможно ли создание такой программы: Ввести строку и два слова, заменить все вхождения первого слова на второе.

Заменить все вхождения первого слова на второе - C++
Непонятная ошибка в коде Всем привет! Нам задали написать программу на С++, которая должна заменять все вхождения первого слова на...

Как в переменной строкового типа заменить все вхождения одного символа на другой? - C++
Подскажите как в переменной строкового типа заменить все вхождения одного символа на другой. Очень обрадуюсь ссылке или примеру кода...

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

Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11 - C++
Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11, остальные без изменений

7
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2013, 20:08 #2
Цитата Сообщение от proger123 Посмотреть сообщение
Что делаю не так?
Вот это:
C++
1
fwrite(str1.c_str(), sizeof(string), sizeof(str1), output);
И зачем здесь, вообще, бинарный режим потребовался?
1
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
01.10.2013, 20:34  [ТС] #3
А как тогда переделать?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2013, 21:02 #4
Цитата Сообщение от proger123 Посмотреть сообщение
А как тогда переделать?
fputs().
1
proger123
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
01.10.2013, 21:41  [ТС] #5
как преобразовать string в char*?
0
alsav22
5426 / 4821 / 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);
1
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;
 
}
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2013, 19:13 #8
Вот это зачем сделали?
C++
1
2
// std::string str;
char *str;
Указатель объявлили, а память выделить?
0
02.10.2013, 19:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2013, 19:13
Привет! Вот еще темы с ответами:

Замена одного слова на другое - C++
Здравствуйте!!!! Помогите плз. Есть задача: Строки. Написать программу, в которой пользователь вводит строку текста, слово, которое...

Замена одного слова на другое - C++
Здраствуйте. В рядок через пробел записаны слова(допустим названия зарубежных городов). Необхобимо заменить их на другие(наши города). Ввод...

Замена одного слова в строке на другое - C++
Как заменить read на study ? int main(int argc, char**argv) { string /*const*/ text1 = &quot;I'm reading\n&quot;; string /*const*/ text2...

Замена одного слова на другое в массиве строк С++ - C++
Заданы массив строк и два слова: первое - то, которое мы будем заменять, и второе - соответственно то слово, которым мы будем заменять...


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

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

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