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

Замена слов в строке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Ar2Di2
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 4
27.11.2010, 16:44     Замена слов в строке #1
Собственно, сама задача:
С клавиатуры вводится некоторый текст. Потом вводится слово(1) которое нужно заменить и слово(2) на которое нужно заменить. Если слово(1) встречается в тексте несколько раз, то во всех случаях его нужно заменить словом(2).
У меня такой вопрос, господа программисты, получится ли эту программу реализовать с помощью функций strstr, strncat, strncpy? А то мне кажется, что ее легче решить посимвольным сравнением.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2010, 16:44     Замена слов в строке
Посмотрите здесь:

C++ Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение.
Замена слов в строке C++
C++ В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).
Замена слов в строке C++
Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
qwarta
 Аватар для qwarta
57 / 57 / 5
Регистрация: 20.11.2009
Сообщений: 214
28.11.2010, 11:22     Замена слов в строке #2
C
1
2
3
4
5
6
7
8
9
исходный массив - введенный с клавиатуры текст
организуем цикл
strtok() - разбиваем текст на слова
{
    сравниваем с первым словом
    если оно, пишем во 2-ой массив слово для замены
    если не оно, пишем исходное слово 
}
выводим 2-ой массив
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.11.2010, 11:40     Замена слов в строке #3
Цитата Сообщение от Ar2Di2 Посмотреть сообщение
А то мне кажется, что ее легче решить посимвольным сравнением.
могу написать код такой программы
надо?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.11.2010, 13:24     Замена слов в строке #4
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
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
 
int main()
{
        std::string str, _1word, _2word;
        std::cout << "Enter string: ";
        getline(std::cin, str);
 
        std::cout << "Enter first word: ";
        std::cin >> _1word;
 
        std::cout << "Enter second word: ";
        std::cin >> _2word;
 
        std::istringstream ist(str);
        std::vector<std::string> vec_str;
 
        while(ist >> str)
        {
            vec_str.push_back(str);
        }
 
        for(int i = 0; i < vec_str.size(); ++i)
        {
            if(vec_str[i] == _1word)
            {
                vec_str[i] = _2word;
            }
        }
 
        std::copy(vec_str.begin(), vec_str.end(), std::ostream_iterator<std::string>(std::cout, " "));
 
        return 0;
}
Ar2Di2
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 4
29.11.2010, 22:30  [ТС]     Замена слов в строке #5
Спасибо всем за помощь!
4ance
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 78
13.12.2010, 16:27     Замена слов в строке #6
Цитата Сообщение от asics Посмотреть сообщение
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
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
 
int main()
{
        std::string str, _1word, _2word;
        std::cout << "Enter string: ";
        getline(std::cin, str);
 
        std::cout << "Enter first word: ";
        std::cin >> _1word;
 
        std::cout << "Enter second word: ";
        std::cin >> _2word;
 
        std::istringstream ist(str);
        std::vector<std::string> vec_str;
 
        while(ist >> str)
        {
            vec_str.push_back(str);
        }
 
        for(int i = 0; i < vec_str.size(); ++i)
        {
            if(vec_str[i] == _1word)
            {
                vec_str[i] = _2word;
            }
        }
 
        std::copy(vec_str.begin(), vec_str.end(), std::ostream_iterator<std::string>(std::cout, " "));
 
        return 0;
}
std::istringstream ist(str);
ist() - что за функция? На cplusplus.com не нашёл такую)
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.12.2010, 16:38     Замена слов в строке #7
4ance, Вот - почитай.
4ance
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 78
14.12.2010, 15:13     Замена слов в строке #8
Цитата Сообщение от asics Посмотреть сообщение
4ance, Вот - почитай.
Получается, что каждый элемент вектора представляет собой слово.

Одна из последних строчек - как конкретно она выводит вектор?

std::copy(vec_str.begin(), vec_str.end(), std::ostream_iterator<std::string>(std::cout, " "));
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.12.2010, 15:16     Замена слов в строке #9
Цитата Сообщение от 4ance Посмотреть сообщение
Получается, что каждый элемент вектора представляет собой слово.
Да.
Цитата Сообщение от 4ance Посмотреть сообщение
Одна из последних строчек - как конкретно она выводит вектор?
Через пробел.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.12.2010, 15:49     Замена слов в строке #10
asics, так ещё эстээльнее
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
#include <iostream>
#include <sstream>
#include <string>
#include <list>
#include <algorithm>
#include <iterator>
 
int main(){
    std::string str, wrd1, wrd2;
    
    std::cout << "String: ";
    std::getline(std::cin, str);
    std::cout << "Change from: ";
    std::cin >> wrd1;
    std::cout << "Change to: ";
    std::cin >> wrd2;
    
    std::istringstream ist(str);
    std::list<std::string> list;
    std::copy(std::istream_iterator<std::string>(ist), std::istream_iterator<std::string>(), std::back_inserter(list));
    std::replace(list.begin(), list.end(), wrd1, wrd2);
    
    std::cout << "Result: ";
    std::copy(list.begin(), list.end(), std::ostream_iterator<std::string>(std::cout, " "));
    std::cout << std::endl;
    
    return 0;
}
Marme
 Аватар для Marme
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 11
22.12.2010, 22:24     Замена слов в строке #11
easybudda, ты гений))))))))))))))))))))))))))))) спасибо спасибо!!!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.12.2010, 22:56     Замена слов в строке #12
Цитата Сообщение от Marme Посмотреть сообщение
спасибо
обращайтесь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2015, 16:51     Замена слов в строке
Еще ссылки по теме:

C++ Массив символов (Подсчитать количество слов в строке, при условии, что в качестве разделителя слов используется один или несколько пробелов)
Количество слов в заданной строке (для каждого из слов) C++
Замена слов в строке на другое слово C++

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

Или воспользуйтесь поиском по форуму:
Алеекс
2 / 2 / 1
Регистрация: 23.10.2014
Сообщений: 51
09.03.2015, 16:51     Замена слов в строке #13
Ребят, скажите а пробелы учитываются?
Yandex
Объявления
09.03.2015, 16:51     Замена слов в строке
Ответ Создать тему
Опции темы

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