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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Dxsile
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 9
02.10.2012, 00:09     Функция для удаления слова из строки #1
Доброго времени суток, господа!
Столкнулся с проблемой написания функции для удаления слова из строки.
До этого приходилось удалять лишь лишние пробелы, делал это следующим образом
C++
1
2
3
4
5
for(i=0;i<strlen(str);i++)
        if((str[i]==' ')&&(str[i+1]==' ')){
            delchar(str,i+1);
            i-- ;
        }
, где delchar

C++
1
2
3
4
5
6
char* delchar(char* str, size_t n){
            int len = strlen(str)-n;
            if(len>0)
            memmove(str+n, str+n+1, len);
            return str;
}
Но как прикрутить это к данной задаче - ума не дам. Знатоки, подскажите, пожалуйста!
(VS2010, если что)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
koorya
 Аватар для koorya
331 / 177 / 18
Регистрация: 18.03.2010
Сообщений: 579
Записей в блоге: 11
02.10.2012, 00:48     Функция для удаления слова из строки #2
Как-нибудь так.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//str - строка
//strlen - длина строки
//mywrd - слово, которое нужно найти и удалить
//mywrdlen - длина того слова
//delfromto(строка, первый_удаляемый_символ, последний_удаляемый_символ) - функцыя удаляющая из строки символы
int j=0;
for(int i=0; i<strlen; i++){
  j=0;
  for(j=0; (j<mywrdlen)&&(str[i+j]==mywrd[j]); j++);
  if(j==mywrdlen){
    delfromto(str, i, i+j);
    strlen-=j;
    i-=j;
  }
}
Тут только идея. Навряд ли оно сразу заработает.
Dxsile
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 9
02.10.2012, 02:33  [ТС]     Функция для удаления слова из строки #3
спасибо, буду пробовать!

Добавлено через 1 час 39 минут
не, не взлетело
пробовал вот так :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char* del_word(char *dict, char *str){
 
    
    int j=0;
    for(int i=0; i<strlen(dict); i++){
        j=0;
        for(j=0; (j<strlen(str))&&(str[i+j]==str[j]); j++);
        if(j==strlen(str)){
        dict=delchar(dict, i, i+j);
        //strlen(dict)-=j;
        i-=j;
        }
    }
    return dict;
}
, где delchar
C++
1
2
3
4
5
6
char* delchar(char *str, int i, int n){
            int len = strlen(str)-n;//передать сюда длину строки, длину слова
            if(len>0)
            memmove(str+i, str+n, len);
            return str;
}
Удалять то в принципе удаляет, но не то, что надо, и криво - удалилось первое слово с пробелом(6 символов), а в конец добавились последние шесть символов файла, т.е. в конце файла получилось "qweasd weasd "(с пробелом в самом конце).
koorya
 Аватар для koorya
331 / 177 / 18
Регистрация: 18.03.2010
Сообщений: 579
Записей в блоге: 11
02.10.2012, 02:39     Функция для удаления слова из строки #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
char* del_word(char *dict, char *str){
int j=0;
* * for(int i=0; i<strlen(dict); i++){
* * * * j=0;
* * * * for(j=0; (j<strlen(str))&&(str[i+j]==str[j]); j++);//тут у Вас путаница, к примеру.
* * * * if(j==strlen(str)){
* * * * dict=delchar(dict, i, i+j);
* * * * //strlen(dict)-=j;
* * * * i-=j;
* * * * }
* * }
* * return dict;
}
Dxsile
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 9
02.10.2012, 02:57  [ТС]     Функция для удаления слова из строки #5
аеее, спасибо вам огромное! взлетело
именно в той строчке и была ошибка - должно было быть не str[i+j], а dict[i+j]. Видимо , сбило с толку название слова str у меня Ещё раз огромное вам спасибо !
Yandex
Объявления
02.10.2012, 02:57     Функция для удаления слова из строки
Ответ Создать тему
Опции темы

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