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

Заменить все вхождения строки s2 в строку s1 на строку s3 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 20:02     Заменить все вхождения строки s2 в строку s1 на строку s3 #1
Дано три строки s1, s2, s3. Заменить в строке s1 все вхождения s2 на s3.

Помогите. Не знаю как сделать.
Вообще мыслей никаких(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2012, 20:02     Заменить все вхождения строки s2 в строку s1 на строку s3
Посмотрите здесь:

C++ Ввести строку и слово, удалить все вхождения слова и вывести строку
Ввести строку и два слова, заменить все вхождения первого слова на второе C++
C++ Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0
C++ Преобразовать строку: все вхождения abc заменить на def
C++ Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.10.2012, 23:31     Заменить все вхождения строки s2 в строку s1 на строку s3 #21
Цитата Сообщение от David Sylva Посмотреть сообщение
go покажи как, до меня никак не доходит.
ну я предложил ответ на вопрос
Цитата Сообщение от vipusknik Посмотреть сообщение
например, s3 < s2.
В идеале может быть и больше. Поэтому так.
Я бы сделал так функцию insert
Проверяйте, может ошибся, время то уже позднее
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
char* insert(char *src, char *s, char *dst)
{
   char *t = strdup(src + strlen(s));
   strcpy(src, dst);
   strcat(src, t);
   free(t);
   return src;
}
 
int main(void)
{
   char s[BUFSIZ] = "__Hello world";
   char *s1 = "Hi";
   char *s2 = "Hello";
   char *ptr = strchr(s, 'H');
 
   printf("%s\n", insert(ptr, s2, s1));
   printf("%s\n", insert(ptr, s1, s2));
   printf("%s\n", insert(ptr, s2, s2));
   printf("%s\n", s);
 
   return 0;
}
http://ideone.com/Ck8SO

Добавлено через 37 секунд
Bash
1
2
3
4
Hi world
Hello world
Hello world
__Hello world
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
18.10.2012, 09:08     Заменить все вхождения строки s2 в строку s1 на строку s3 #22
go отличный вариант, но по моему он не работает если несколько вхождений слова.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.10.2012, 10:51     Заменить все вхождения строки s2 в строку s1 на строку s3 #23
Цитата Сообщение от David Sylva Посмотреть сообщение
но по моему он не работает если несколько вхождений слова.
В смысле?
Вот протестил

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
char* insert(char *src, char *s, char *dst)
{
   char *t = strdup(src + strlen(s));
   strcpy(src, dst);
   strcat(src, t);
   free(t);
   return src;
}
 
int main(void)
{
   char s[BUFSIZ] = "Hello, world, Hello";
   char *s1 = "Hi";
   char *s2 = "Hello";
 
   printf("%s\n", s);
 
   for (char *ptr = strstr(s, s2); ptr; ptr = strstr(ptr + 1, s2))
      insert(ptr, s2, s1);
 
   printf("%s\n", s);
 
   for (char *ptr = strstr(s, s1); ptr; ptr = strstr(ptr + 1, s1))
      insert(ptr, s1, s2);
 
   printf("%s\n", s);
 
   for (char *ptr = strstr(s, s2); ptr; ptr = strstr(ptr + 1, s2))
      insert(ptr, s2, s2);
 
   printf("%s\n", s);
 
   return 0;
}
http://ideone.com/sqrul
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 11:20     Заменить все вхождения строки s2 в строку s1 на строку s3
Еще ссылки по теме:

C++ Заменить в строке символ 'q' на номер вхождения в строку в обратном порядке
Ввести строку текста и строку поиска, найти местоположение первого вхождения строки поиска в строку текста C++
Найти все вхождения в строку последовательности символов "сто" и заменить на "100" C++

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
18.10.2012, 11:20     Заменить все вхождения строки s2 в строку s1 на строку s3 #24
Да всё норм работает.

Не по теме:

Жаль автору темы твоя программа не пригодится

Yandex
Объявления
18.10.2012, 11:20     Заменить все вхождения строки s2 в строку s1 на строку s3
Ответ Создать тему
Опции темы

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