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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
#1

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

17.10.2012, 20:02. Просмотров 1791. Ответов 23
Метки нет (Все метки)

Дано три строки s1, s2, s3. Заменить в строке s1 все вхождения s2 на s3.

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

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

Заменить в строке все вхождения abc на def и напечатать полученную строку - C++
Здравствуйте. В программировании мозги не много соображают, что как работает понять могу, но вот написать самому редко получается. ...

Ввести строку и слово, удалить все вхождения слова и вывести строку - C++
помогите с лабой! Добавлено через 22 секунды через <stdio.h>

Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0 - C++
Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0. Помогите пожалуйста с реализацией на Си

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.10.2012, 20:22 #2
vipusknik, std::search ищет, std::string::replace меняет.
1
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 20:23 #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;
  
}
1
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
17.10.2012, 20:43 #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;
}
2
vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 21:08  [ТС] #5
спасибо большое.
я вот только не поняла что вот это вы сделали char* ptr;?
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 21:10 #6
char* ptr - это указатель на тип char.
0
vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 21:24  [ТС] #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 ".
как их убрать?
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 21:34 #8
Сложновато будет сделать, придется придумывать велосипед. Я тебе показал для примера, а так конечно надо использовать средства STL.
0
vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 21:48  [ТС] #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]; 
        }
 
    }
помогите пожалуйста,если знаете
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 22:03 #10
Не очень понятна твоя идея, опиши в двух словах как ты хочешь реализовать.

Добавлено через 2 минуты
string нельзя использовать?
0
vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 22:06  [ТС] #11
если вхождения с2 в с1 нет, то переписываем с1 в новую строку пока не появится вхождение.
если оно есть,то начиная с этой позиции дописываем в новую строку строку с3, потом дальше переписываем с1 пока не будет второе вхождение( если оно будет).
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 22:19 #12
Всё придумал как можно сделать, строки вводятся с клавиатуры?
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.10.2012, 22:28 #13
Цитата Сообщение от David Sylva Посмотреть сообщение
Сложновато будет сделать, придется придумывать велосипед.
С чего это? Просто еще раз strncpy вызвать и все
1
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.10.2012, 22:34 #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;
}
0
vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
17.10.2012, 22:35  [ТС] #15
а если без пробелов? сплошная строка
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 22:35
Привет! Вот еще темы с ответами:

Заменить все символы "*" числом, совпадающим с порядковым номером вхождения данного символа в строку - C++
В заданной строке мне нужно заменить все &quot;*&quot; числом, которое будет отвечать номеру за порядком вхождения данного символа в строку.

Найти все вхождения в строку последовательности символов "сто" и заменить на "100" - C++
Дана строка символов. Найти все вхождений последовательностей символов &quot;сто&quot; и заменить на &quot;100&quot;

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

Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 - C++
Здравтсвуйте! помогите пжл решить задачу. Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы...


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

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

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