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

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

Войти
Регистрация
Восстановить пароль
 
Dmitry78
Сообщений: n/a
#1

Заменить первые вхождения заданной подстроки S1 на заданную подстроку S2 - C++

30.05.2008, 17:27. Просмотров 1077. Ответов 1
Метки нет (Все метки)

Помогите решить задачку пож.
1. Заменить первые вхождения заданной подстроки S1 на заданную подстроку S2
2. Удалить первые вхождения заданных символов С1, С2, С3, заполняя оброзовавшиеся "дыры" последующими символами
3. Добавить после каждого заданного символа С1 заданный символ С2

Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2008, 17:27     Заменить первые вхождения заданной подстроки S1 на заданную подстроку S2
Посмотрите здесь:
C++ STL. Заменить в строке S все вхождения подстроки S1 на подстроку S2
Заменить в строке все вхождения подстроки str1 на подстроку str2 C++
C++ Заменить в строке все вхождения подстроки str1 на подстроку str2
Заменить в строке все вхождения подстроки str1 на подстроку str2 C++
C++ В строке заменить заданную подстроку
Найти координаты первого вхождения в заданную строку подстроки, состоящей из двух одинаковых заданных символов C++
C++ Заменить в строке последнее вхождение данной подстроки на другую подстроку
C++ Поиск последнего вхождения в строку заданной подстроки
C++ В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась
Заменить в строке все вхождения одной подстроки на другую C++
C++ Определить, входят ли в заданную строку все символы заданной подстроки

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
09.06.2008, 16:57     Заменить первые вхождения заданной подстроки S1 на заданную подстроку S2 #2
Ну что ж давайте попробуем. Решим для начала первое задание. Прежде всего напишем функцию dd. Её текст и описание ниже. Язык С

//Здесь разработана функция dd. Эта функция вот чем занимается: во-первых, она принимает три аргумента: строку символов, и два числа (n1, n2) типа int. Ничего не возвращает. Эта функция сдвигает часть строки, начинающуюся с символа N n влево или вправо на модуль n1. ЕСли n1> 0, то сдвиг происходит вправо, если меньше, то влево, если ноль- никуда не происходит. Необходимо вручню следить за тем, чтобы всё во всё влезало. Корректно то есть чтобы сдвиги происходили.
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
#include <string.h>
#include <stdio.h>
 
void dd (char s [], int n, int n1) {
 int dl= strlen (s)- 1;
 printf ("%d\n", dl+ n1+ 1); 
 
 //Ну, тут работаем если n1> 0
 if (n1> 0) {
  s [dl+ n1+ 1]= '\0';
  while (dl>= n) {
   s [dl+ n1]= s [dl--];
  }
 }
 
 //А тут, если меньше
 else{
  do {
   s [n+ n1]= s [n++];
  }
  while (n<= dl);
  s [n+ n1]= '\0';
 }
 
}




Теперь собственно решение, отдельной функцией выполнять не стал. Критикуйте, обсудим

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
#include <stdio.h>
int main (void) {
 char s [40]= "qwertyyyyyyyyuiopp";
 char s1 []= "yyyyyyyy";
 char s2 []= "xxx";
 char* d;
 int i= 0;
 
 //ЗДесь работаем, если вхождение существует
 if (d= strstr (s, s1)) {
 
  //Сейчас надо расширить или сузить строку s, чтобы в неё входила строка s2
  dd (s, d- s+ strlen (s1),strlen (s2)- strlen (s1));
 
  while (s2 [i]!= '\0') {
   *d= s2 [i++];
   d++;
  }  
 } 
 
 printf ("%s\n", s); 
 
 return 0;
}
Ответ Создать тему
Опции темы

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