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

Удалить из строки S1 первую подстроку, совпадающую с S2 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.81
Unisol
1 / 1 / 0
Регистрация: 16.06.2010
Сообщений: 16
16.06.2010, 11:30     Удалить из строки S1 первую подстроку, совпадающую с S2 #1
Даны две строки: S1 и S2. Удалить из строки S1 первую подстроку, совпадающую с S2. Если такой подстроки нет, то вывести S1 без изменений.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2010, 11:30     Удалить из строки S1 первую подстроку, совпадающую с S2
Посмотрите здесь:

Помогите выделить подстроку из строки... C++
Удаления со строки подстроку! C++
C++ Функция получает строку1 и строку2 и ищет в строке1 первую подстроку, равную строке2
C++ В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась
Строки. Удалить из строки S1 последнюю подстроку, совпадающую с S2 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.06.2010, 11:43     Удалить из строки S1 первую подстроку, совпадающую с S2 #2
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>
#include <string.h>
 
int main(int argc, char* argv[])
{
   char s1[256], s2[256];
   char *buf;
   int i,j;
 
   printf("Введите строку 1: ");
   gets(s1);
   printf("Введите строку 2: ");
   gets(s2);
   buf = strstr(s1, s2);
   if (buf)
   {
      for (i = 0; i < strlen(s2); i++)
         for (j = 0; j < strlen(s1); j++)
            buf[j] = buf[j+1];
   }
   printf("%s\n", s1);
   getchar();
   return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.06.2010, 15:52     Удалить из строки S1 первую подстроку, совпадающую с S2 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main(){
    std::string s1, s2;
    std::cout << "s1: ";
    std::getline(std::cin, s1);
    std::cout << "s2: ";
    std::getline(std::cin, s2);
    size_t pos;
    if ( ( pos = s1.find(s2) ) != std::string::npos )
        s1.erase(pos, s2.size());
    std::cout << "s1 without s2: " << s1 << std::endl;
    return 0;
}
kniazmc13
Сообщений: n/a
12.01.2012, 00:51     Удалить из строки S1 первую подстроку, совпадающую с S2 #4
kazak, используя свои функции удаление подстроки не происходит!Почему?)

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
int my_strlen(const char *s)
{
    int res=0;
    while(s[res]!='\0')
        res++;
    return res;
}
 
char *strstr(char *s1, char *s2)
{
    char *res=NULL;
    int i, j, len1=my_strlen(s1),
              len2=my_strlen(s2),
              len=len1-len2;
    if(len<0) return res;
    for(i=0;i<len;i++)
    {   for(j=0;j<len2;j++)
        {
            if(s1[i]!=s2[j])
                break;
            if(j==len2) return s1;
        }
    }
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.01.2012, 08:17     Удалить из строки S1 первую подстроку, совпадающую с S2 #5
Потому что в Ваших функциях удаление подстроки незапрограмировано.
Ilyawow
24 / 24 / 5
Регистрация: 18.11.2011
Сообщений: 266
12.01.2012, 08:47     Удалить из строки S1 первую подстроку, совпадающую с S2 #6
C++
1
2
3
4
5
6
7
8
 char str1[123] ,str2[123] ,*p;
...
\\ввод с1 и с2 
...
 
   p = strstr ( str1, str2 ); 
   strcpy ( p, p + strlen(str2) ); 
   ...
Добавлено через 7 минут
Цитата Сообщение от kazak Посмотреть сообщение
C
1
2
3
4
5
6
7
8
   if (buf)
   {
      for (i = 0; i < strlen(s2); i++)
         for (j = 0; j < strlen(s1); j++)
            buf[j] = buf[j+1];
   }
  
}
это все можно заменить strcpy(buf,buf+strlen(s2));
Yandex
Объявления
12.01.2012, 08:47     Удалить из строки S1 первую подстроку, совпадающую с S2
Ответ Создать тему
Опции темы

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