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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Dxsile
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 9
#1

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

02.10.2012, 00:09. Просмотров 2635. Ответов 4
Метки нет (Все метки)

Доброго времени суток, господа!
Столкнулся с проблемой написания функции для удаления слова из строки.
До этого приходилось удалять лишь лишние пробелы, делал это следующим образом
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, если что)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2012, 00:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция для удаления слова из строки (C++):

Функция для удаления строки из двумерного массива - C++
Массив должен передаваться в функцию как параметр. Написать функцию для удаления строки из двумерного массива. Оставшиеся строки должны...

Функция удаления подстроки из строки - C++
Начал читать книжку, в ней задание накидать такую функцию. Вроде написал, но безумно коряво с костылями, поэтому она почемуто иногда...

Функция удаления из строки n-символов, начиная с q-го - C++
напишите функцию удаления из строки n-символов, начина с q-го

Функция удаления из строки всех точек - C++
Нужно разработать рекурсивную функцию для удаления всех точек из строки. Вот, что у меня получилось. Выбивает ошибку String subscript out...

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

Написать программу удаления из строки слова с заданным номером. - C++
8.10.1. Помогите, пожалуйста, решить задачу. Написать программу удаления из строки слова с заданным номером.

4
koorya
333 / 179 / 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;
  }
}
Тут только идея. Навряд ли оно сразу заработает.
1
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 "(с пробелом в самом конце).
0
koorya
333 / 179 / 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;
}
2
Dxsile
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 9
02.10.2012, 02:57  [ТС] #5
аеее, спасибо вам огромное! взлетело
именно в той строчке и была ошибка - должно было быть не str[i+j], а dict[i+j]. Видимо , сбило с толку название слова str у меня Ещё раз огромное вам спасибо !
0
02.10.2012, 02:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2012, 02:57
Привет! Вот еще темы с ответами:

функция в си++ для удаления элемента - C++
Есть ли функция в си++ для удаления элемента,например из текста?) Запрещено создавать темы с бессмысленными названиями вроде...

Функция для удаления из массива простых чисел - C++
Написать функцию которая удаляет все простые числа из массива X.И вывести массив без простых чисел.

Функция для удаления всех знаков препинания - C++
Есть набор строк, написать функцию, которая принимает на вход этот набор строк и возвращает новый набор строк, где в каждом из строк...

Функция для удаления выоборочного элемента из очереди - C++
Я удаляю выборочный элемент, вывожу элементы очереди на экран выводятся элементы, которые стояли до удаленного элемента, потом выводится...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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