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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Ar2Di2
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 4
#1

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

27.11.2010, 16:44. Просмотров 4293. Ответов 12
Метки нет (Все метки)

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

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

Замена слов в строке - C++
Программа берет данные из файла. Далее должна заменять Все слова н1 на н2. Однако получается только для первого найденного слова. ...

Замена слов в строке - C++
Можно ли как-то в строке например Заменить все слова "много", как это сделать ?

Замена слов в строке - C++
Помогите с заданием. Дана строка символов S. Каждое второе слово в строке заменить символ тире. Код, который не работает(( ...

Удаление и замена слов в строке - C++
Здравствуйте! Помогите, пожалуйста написать программу! Дана последовательность строк. Каждая строка состоит из слов, разделенных...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
qwarta
73 / 73 / 7
Регистрация: 20.11.2009
Сообщений: 238
28.11.2010, 11:22 #2
C
1
2
3
4
5
6
7
8
9
исходный массив - введенный с клавиатуры текст
организуем цикл
strtok() - разбиваем текст на слова
{
    сравниваем с первым словом
    если оно, пишем во 2-ой массив слово для замены
    если не оно, пишем исходное слово 
}
выводим 2-ой массив
1
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.11.2010, 11:40 #3
Цитата Сообщение от Ar2Di2 Посмотреть сообщение
А то мне кажется, что ее легче решить посимвольным сравнением.
могу написать код такой программы
надо?
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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;
}
0
Ar2Di2
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 4
29.11.2010, 22:30  [ТС] #5
Спасибо всем за помощь!
0
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 не нашёл такую)
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
13.12.2010, 16:38 #7
4ance, Вот - почитай.
0
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, " "));
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 15:16 #9
Цитата Сообщение от 4ance Посмотреть сообщение
Получается, что каждый элемент вектора представляет собой слово.
Да.
Цитата Сообщение от 4ance Посмотреть сообщение
Одна из последних строчек - как конкретно она выводит вектор?
Через пробел.
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
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;
}
2
Marme
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 11
22.12.2010, 22:24 #11
easybudda, ты гений))))))))))))))))))))))))))))) спасибо спасибо!!!
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
22.12.2010, 22:56 #12
Цитата Сообщение от Marme Посмотреть сообщение
спасибо
обращайтесь
0
Алеекс
2 / 2 / 1
Регистрация: 23.10.2014
Сообщений: 55
09.03.2015, 16:51 #13
Ребят, скажите а пробелы учитываются?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2015, 16:51
Привет! Вот еще темы с ответами:

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

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

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

Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение. - C++
Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.03.2015, 16:51
Ответ Создать тему
Опции темы

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