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

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

Восстановить пароль Регистрация
 
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
01.04.2012, 12:49     Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом #1
Задание: заменить заданное слово в строке другим заданным словом

Вот какие баги, если можно так выразиться, я нашёл:
1. Программа ищет не только слово, но и части слов, что не правильно. Например: строка this is, программа, когда вы введете, что надо заменять is на, допустим, KUKU, программа заменит следующим образом: thKUKU KUKU.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RUS");
    const int size = 256;
    char mark = '*';                //маркер, до которого будет выведена строка
    char text[size], slovo[size], zamena[size], *proc;
    int len_text = 0,               //длина строки
        len_slovo = 0,              //длина слова, которое меняем
        len_zamena = 0,             //длина слова, на которое меняем
        len_proc = 0,               //длина части строки после индекса, где начинается слово которое меняем
        i = 0;
    size_t pos;
    ifstream input("D://l3/input.txt");
    while(!input.eof() && text) //ввод строки, пока не встретится маркер
    {                    
        input.get(text[i]);
        if(text[i] == mark) pos = i;
            i++;
    }
    text[pos] = '\0';
    cout <<"Исходный текст: " << text << endl;
    cout <<"Введите слово, которое будем менять: ";
    cin >> slovo;
    cout <<"Введите на что будем менять '" << slovo <<"': ";
    cin >> zamena;
    len_text = strlen(text);
    len_slovo = strlen(slovo);
    len_zamena = strlen(zamena);
    cout << "Слово: " << slovo << endl
         << "Замена: " << zamena << endl; 
    cout << "Длина текста: " << len_text << endl
         << "Длина слова: " << len_slovo << endl
         << "Длина замены: " << len_zamena << endl;
    proc = strstr(text, slovo);
    if(proc == NULL)                    // если слово не найдено, то выводлится соответствующее соообщение
    {
        cout << slovo << " в строке не найдено!" << endl;
    }
    for(int i = 0; i < len_text; i++)
    {
        int counter = 0;//какой-то счетчик, я уже и сам забыл для чего он, может можно и без него
        proc = strstr(text, slovo);
        if(proc == NULL)
        {
            break;
        }
        counter++;
        len_proc = strlen(proc);
        int j = len_slovo;
        int k = 0;
        int len_first = strlen(text);
        int index = len_text - len_proc + 1; // нужный индекс откуда начинать перемещение
        while(j != 0)       //перемещаем текст влево, до индекса начала слова
        {
            for(k = len_text - len_proc; k < len_text; k++)
            {
                text[k] = text[k+1];
            }
            j--;
        }
        int vpravo = len_text+len_zamena+1;
        while(1) // перемещаем текст вправо на количество ячеек массива, как и длина слова для вставки + для пробела
        {
            text[vpravo] = text[len_text];  
            if(len_text == index || index < -5)
            {
                break;
            }
            vpravo--;
            len_text--;
        }
        len_text = strlen(text);
        cout << "Индекс: " << index << endl;//проверка для себя, где слова находит программа
        for(int y = 0; y < len_zamena; y++)
        {
            text[index] = zamena[y];
            index++;
            if((y == len_zamena-1)&&(text[index] != '!' || text[index] != '@' || 
                text[index] != '\"' || text[index] != '\'' || text[index] != '(' || 
                text[index] != ')' )) //этим if я пытался избежать ситуации, например, когда слово находится в кавычках, 
                                    //чтобы не менять место после слова на пробел, а оставить те же кавычки
            {
                text[index] = ' ';
            }
        }
    }
    cout << "Обработанный текст: " << text << endl;
}
Заранее всем спасибо за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2012, 12:49     Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом
Посмотрите здесь:

C++ заменить в строках (содержащих заданное слово) первое слово на другое заданное
C++ В тексте одно введённое слово заменить другим словом, которое также вводится с экрана
C++ Ввести строку и слово. Вставить введенное слово за самым коротким словом в строке.
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово. C++
Заменить в строке одно слово на другое, заданное с клавиатуры. C++
Заменить в строке одно слово на другое, заданное с клавиатуры. C++
Заменить некоторое слово другим словом такой же длины C++
Ввести строку и слово. Вставить введенное слово за пятым словом в строке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.04.2012, 13:11     Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом #2
используй strtok
Yandex
Объявления
01.04.2012, 13:11     Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом
Ответ Создать тему
Опции темы

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