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

Функция удаления подстроки из строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.77
lavrik
10 / 10 / 1
Регистрация: 24.02.2011
Сообщений: 649
12.11.2012, 10:21     Функция удаления подстроки из строки #1
Начал читать книжку, в ней задание накидать такую функцию. Вроде написал, но безумно коряво с костылями, поэтому она почемуто иногда наращивается результирующую строку мусором...

Может у когонибудь есть нормальный код данной функции ?

P.S. для уточнения: нужно чтобы из подстроки "строка для удаления другой строки" при удалении "строк" получилось
"а для удаления другой и".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
12.11.2012, 10:43     Функция удаления подстроки из строки #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
#include <string.h>
#include <stdio.h>
int main () {
 
 char src []=  "pasdqwepasdrtyuiopasdfghjk";
 char src_ []= "pasd";
 char* t;
 
 do { 
  t= strstr (src, src_);
  if (t!=NULL) {
   char* t_= t+ strlen (src_);
   strcpy (t, t_);
  }
  else break;
 }
 while (true);
 
 printf (src);
 getchar ();
 
 return 0;
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 10:44     Функция удаления подстроки из строки #3
покажите ваш корявый код с костылями - поищем ошибки вместе
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
12.11.2012, 10:46     Функция удаления подстроки из строки #4
Вот функцией если
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 <string.h>
#include <stdio.h>
 
 
char* f_ (char*, char*);
int main () {
 
 char src []=  "pasdqwepasdrtyuiopasdfghjk";
 char src_ []= "pasd";
 f_(src, src_);
 printf (src);
 getchar ();
 
 return 0;
}
 
//+++++++++++++++++++++++++++
char* f_ (char* src, char* src_) {
 char* t;
 
 do { 
  t= strstr (src, src_);
  if (t!=NULL) {
   char* t_= t+ strlen (src_);
   strcpy (t, t_);
  }
  else break;
 }
 while (true);
 return src; 
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
12.11.2012, 10:47     Функция удаления подстроки из строки #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
#include <windows.h>
 
int main()
{
    SetConsoleOutputCP(1251);
    char str[] = "строка для удаления подстроки другой строки", *psubstr = (char*)"строк", *p = 0, *p1 = 0;
    size_t size = strlen(psubstr);
    for(; p = strstr(str, psubstr); )
    {
        p1 = p + size;
        while(*p++ = *p1++);
    }
    std::cout << str << std::endl;
    return 0;
}
lavrik
10 / 10 / 1
Регистрация: 24.02.2011
Сообщений: 649
12.11.2012, 10:55  [ТС]     Функция удаления подстроки из строки #6
Будите ругаться, и испортите мне карму.... Но раз настаиваете, то пожалуйста)))


1C
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# include <iostream>
# include <cstdlib>
using namespace std;
int main () {
 
 
         char stringIn[] = "string my string ";
         char stringSearch[] = "my";
         char stringOut[] = "";
         
         int TempArray[80][2];
         
         
         int t, t2, w, plusss, wait;
         char *p, *p2;
         w = 0;
         
         for (t=0; stringIn[t]; t++)
             {
              p = &stringIn[t];
              p2 = stringSearch;
              
              t2 = 0;
              while (*p2 && *p2==*p)
                    {
                     p++;
                     p2++;
                     t2++;
                    }
 
              if (!*p2)
                 { 
                 TempArray[w][1] = t;
                 TempArray[w][2] = t + strlen(stringSearch); 
                 w++;
                 }
             }
             
             
            w = t2 = 0; 
            for (t=0; stringIn[t]; t++)
                 {
                 
                 if (t >= TempArray[w][1] && t <= TempArray[w][2])
                    {
                    plusss=0;      
                    }
                    else
                    {
                    
                    stringOut[t2] = stringIn[t];
                    t2++;
 
                    }
                    if (t >= TempArray[w][2] && !plusss) {w++; plusss=1;}  
                 }
 
 
 
 
 
 
 
 cout << stringOut;
 
 
 
cin >> wait;
 return 0;
}
Добавлено через 3 минуты
хотя его лучше не смотреть... там 3.14дец что творится по сравнению с вашими вариантами)))
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.11.2012, 11:35     Функция удаления подстроки из строки #7
А так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
 
int main()
{
    setlocale (LC_ALL, "Russian");
    string str = "строка для удаления другой строки";
    string del = "строк";
    string::size_type pos = str.find(del);
    while (pos != string::npos)
    {
        str.erase(pos, del.size());
        pos = str.find(del, pos + 1);
    }
    cout<<str<<endl;
    system("pause");
    return 0; 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 11:50     Функция удаления подстроки из строки
Еще ссылки по теме:

C++ Создать функции добавления подстроки и удаления подстроки
Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений C++
C++ Функция удаления из строки n-символов, начиная с q-го

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

Или воспользуйтесь поиском по форуму:
lavrik
10 / 10 / 1
Регистрация: 24.02.2011
Сообщений: 649
12.11.2012, 11:50  [ТС]     Функция удаления подстроки из строки #8
Цитата Сообщение от yuron_477 Посмотреть сообщение
Код C++1
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
int main()
{
* * setlocale (LC_ALL, "Russian");
* * string str = "строка для удаления другой строки";
* * string del = "строк";
* * string::size_type pos = str.find(del);
* * while (pos != string::npos)
* * {
* * * * str.erase(pos, del.size());
* * * * pos = str.find(del, pos + 1);
* * }
* * cout<<str<<endl;
* * system("pause");
* * return 0;
}

до таких штук я вкниге ещё не дочитал))))
Yandex
Объявления
12.11.2012, 11:50     Функция удаления подстроки из строки
Ответ Создать тему
Опции темы

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