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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа без ";" в синтаксисе http://www.cyberforum.ru/cpp-beginners/thread535777.html
Как (и возможно ли) написать простейшую программу, которая бы печатала одну фразу, без использования ; ? Заранее спасибо!
C++ Строки. Распечатать все слова нечётной длины, в которых есть буква Т. Помогите с задачей. Дана строка символов. Группу символов, разделённую с одной или с обеих сторон одним или несколькими пробелами и не содержащую внутри себя пробелов назовём словом. Распечатаь все слова нечётной длины, в которых есть буква Т. http://www.cyberforum.ru/cpp-beginners/thread535776.html
C++ Вводится некоторое количество чисел. ввод кончается 0. оставить только повторяющиеся числа
Вводится некоторое количество чисел. ввод кончается 0. выбросить все повторяющиеся числа вот рабочая программа #include <set> #include <algorithm> #include <iostream> using namespace std;
Как вывести 3D изображение на экран без DX C++
На DirectX нет вреени и мозгов. Как вывести 3D изображение на экран без DX? Только не надо писать, что все-таки лучш учить DX, я знаю что он во много раз ускоряет процес построения изображения. Заранее спасибо.
C++ СОМ порт - как передать код http://www.cyberforum.ru/cpp-beginners/thread535758.html
Как в с++ передать код на com порт? К примеру на (* basic по моему) out(%.....), 4 на порт (%.....) выводим (out) число (4) в десятичном, а он воспринимает (100) в двоичном. Подскажите как в с++ можно это делать, какие функции и билиотеки?
C++ В строке S1 найти слово DOM В строке S1 найти слово DOM, если оно есть то вывести все номера позиции подробнее

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

Вот какие баги, если можно так выразиться, я нашёл:
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;
}
Заранее всем спасибо за помощь!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru