Форум программистов, компьютерный форум 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, 20:22     Заменить все вхождения строки s2 в строку s1 на строку s3 #2
vipusknik, std::search ищет, std::string::replace меняет.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 20:23     Заменить все вхождения строки s2 в строку s1 на строку s3 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main ()
{
  char s1[] ="Real Madrid Champions of Real ";
  char s2[] = "Real";  
  char s3[] = "Loko"; 
  char* ptr;
  while(strstr(s1, s2)) 
  {
  ptr = strstr (s1,s2);
  strncpy (ptr,s3, 4);
  } 
  std::cout << s1 << std::endl;
  
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
17.10.2012, 20:43     Заменить все вхождения строки s2 в строку s1 на строку s3 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    string s1("The quick brown fox jumps over jumps the lazy_jumps dog.");
    string s2("jumps");
    string s3("!##!");
    auto pos = s1.find(s2);
    while (pos != string::npos)
    {
        s1.replace(pos, s2.size(), s3);
        pos = s1.find(s2, pos+1);
    }
    cout<<s1<<endl;
    system("pause");
    return 0;
}
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 21:08  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #5
спасибо большое.
я вот только не поняла что вот это вы сделали char* ptr;?
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 21:10     Заменить все вхождения строки s2 в строку s1 на строку s3 #6
char* ptr - это указатель на тип char.
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 21:24  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #7
ага. поняла.

еще вопрос.а если,например, строки s3 и s2 будут разной длины. например, s3 < s2. тогда когда мы заменим в s1 на s3 то останется еще некоторые символы s2.

C++
1
2
3
char s1[] ="Real Madrid Champions of Real ";
  char s2[] = "Real";  
  char s3[] = "Lo";
станет "Loal Madrid Champions of Loal ".
как их убрать?
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 21:34     Заменить все вхождения строки s2 в строку s1 на строку s3 #8
Сложновато будет сделать, придется придумывать велосипед. Я тебе показал для примера, а так конечно надо использовать средства STL.
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 21:48  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #9
я вот здесь сама пытала придумывать,но застряла.
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
int main()
{ char s3[255],s1[255],s2[255];
char ss[255]; // новая строка в которую я переписываю все
int i,k,l,f,p,o;
 
printf("vvedit s1");
gets(s1);
printf("vvedit s2");
gets(s2);
printf("vvedit s3");
gets(s3);
 
for(i=0;i<255;i++) // забила ее пропусками
ss[i]=' ';
k=0;
for(i=0;i<strlen(s1);i++) // иду по 1 строке
{ 
    if (strstr(s1,s2)==0) //если вхождения 2 в 1 нету то просто переписываю с 1 в ss символы
    { ss[k]=s1[i];
    k++;} 
    else 
    { l=strstr(s1,s2); k++; // проверка на то что часть 1 строки равняется 2
        for(j=0;j<strlen(s2);j++)
        { 
            if (s1[l]==s2[j]) o++; l++; // переменная о увиличивается каждый раз когда символы одинаковые, 
        }
        
        if (o==strlen(s2)) // если часть 1 строки точно совпадает с 2 то строку 3 дописываем в ss начиная с позиции вхождения
        { 
            for(p=0;p<strlen(s3);p++)
        { ss[k]=s3[p]; k++;
            }
        } 
        else // а вот здесь как-бы если не совпало 2 и кусок 1 то нада продолжить переписывать 1 стоку но я не знаю как.
        { k++;
            ss[k]=s1[i]; 
        }
 
    }
помогите пожалуйста,если знаете
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 22:03     Заменить все вхождения строки s2 в строку s1 на строку s3 #10
Не очень понятна твоя идея, опиши в двух словах как ты хочешь реализовать.

Добавлено через 2 минуты
string нельзя использовать?
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 22:06  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #11
если вхождения с2 в с1 нет, то переписываем с1 в новую строку пока не появится вхождение.
если оно есть,то начиная с этой позиции дописываем в новую строку строку с3, потом дальше переписываем с1 пока не будет второе вхождение( если оно будет).
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 22:19     Заменить все вхождения строки s2 в строку s1 на строку s3 #12
Всё придумал как можно сделать, строки вводятся с клавиатуры?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.10.2012, 22:28     Заменить все вхождения строки s2 в строку s1 на строку s3 #13
Цитата Сообщение от David Sylva Посмотреть сообщение
Сложновато будет сделать, придется придумывать велосипед.
С чего это? Просто еще раз strncpy вызвать и все
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 22:34     Заменить все вхождения строки s2 в строку s1 на строку s3 #14
go покажи как, до меня никак не доходит.

Добавлено через 1 минуту
Пока могу предложить вот такой вариант
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
#include <iostream> 
 
int main() 
{ 
    char str[100] = "Madrid Real Champions of Real Jose"; 
    char s1[] = "Real"; 
    char s2[] = "Lokomoniv"; 
    char buffer[250] = ""; 
    char* ptr; 
    ptr = strtok(str, " ,."); // функция разбивает строку на слова 
 
    while(ptr!=NULL) 
    {   
        int size = strlen(ptr);
        if(strcmp(ptr, s1) == 0) // если слово совпадает с нашим
        {
            strcat(buffer, s2); // функция конкатенирует строки, добавляем наше слово
            strcat(buffer, " "); // добавляем пробел
        }
            
        else  
        {
            strcat(buffer, ptr);  // иначе добавляем текущие слово
            strcat(buffer, " "); // пробел
        }
        
           ptr = strtok(NULL, " ,.");  
          
    }  
    std::cout << buffer << std::endl;
}
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 22:35  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #15
а если без пробелов? сплошная строка
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 22:39     Заменить все вхождения строки s2 в строку s1 на строку s3 #16
Цитата Сообщение от vipusknik Посмотреть сообщение
а если без пробелов? сплошная строка
тогда это не строка, а длинное слово.
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 22:45  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #17
ну как мне препод сказал, то должно быть что-то вроде такого:
s1 - tanyanikitany
s2 - an
s3 - qwer

tqweryqwerikitqwery
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.10.2012, 22:50     Заменить все вхождения строки s2 в строку s1 на строку s3 #18
Цитата Сообщение от vipusknik Посмотреть сообщение
Дано три строки s1, s2, s3. Заменить в строке s1 все вхождения s2 на s3.
Нее не твоё задание? Строки и слова умеешь отличать?
vipusknik
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 22:54  [ТС]     Заменить все вхождения строки s2 в строку s1 на строку s3 #19
тоесть по словам должно быть,да?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 22:57     Заменить все вхождения строки s2 в строку s1 на строку s3
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
David Sylva
17.10.2012, 22:57     Заменить все вхождения строки s2 в строку s1 на строку s3
  #20

Не по теме:

Всё я умываю руки

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

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