Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > удалить символ из строки


Автор: Dende-Soft 22.2.2009, 22:32
Такая задача. Будьте добры, помогите решить, так как завтра на дежурство... Голова не варит....

Нужно написать на С функцию, удаляющую заданные буквы из строки.
Строку и удаляемый символ вводит пользователь.Реализовать нужно с помощью массивов. то есть, ввести дополнительный массив и т.д... Ну а строка и есть массив символов....

Заранее благодарю...

Автор: Anikmar 22.2.2009, 22:34
Цитата(Dende-Soft @  22.2.2009,  22:32 Найти цитируемый пост)
помогите решить

Помочь? Или решить?

Что у вас там есть - код в студию.

Автор: andrew_121 22.2.2009, 22:43
Dende-Soft, Вот для С:
Код

char* remove_char(char* result, const char* str, char ch) {
    char* ptr = result;
    
    while (*str++ != 0) {
        if ( *str == ch ) continue;
        *ptr++ = *str;
    }
    
    return result;
}

#define STRING "bla bla-bla"

int main(int argc, char** argv) {

    char result[sizeof(STRING)] = {0};
    char* p = remove_char(result, STRING, 'a');
    
    printf("%s\n", p);
    
    return 0;
}


Для С++
Код

#include <algorithm>
#include <string>

std::string remove_char(std::string str, std::string::value_type ch) {
    str.assign(str.begin(), std::remove(str.begin(), str.end(), ch));
    return str;
}

int main(int argc, char** argv) {

    std::string str = "bla bla-bla";
    std::string result = remove_char(str, 'a');
    
    printf("%s\n", result.c_str());
    
    return 0;
}

Автор: mes 23.2.2009, 01:25
Цитата(andrew_121 @  22.2.2009,  21:43 Найти цитируемый пост)
Вот для С:

возвращаем указатель на внутренний буффер ?...  smile 
нда..  smile 
Цитата(andrew_121 @  22.2.2009,  21:43 Найти цитируемый пост)
Для С++

a стоило ли оборачивать содержимое в функцию ?  smile 

Автор: andrew_121 23.2.2009, 01:48
Цитата(mes @  23.2.2009,  01:25 Найти цитируемый пост)
возвращаем указатель на внутренний буффер ?...

А нечего что он static?!

Автор: mes 23.2.2009, 02:04
Цитата(andrew_121 @  23.2.2009,  00:48 Найти цитируемый пост)
А нечего что он static?! 

a ничего если эту функцию вызовут дважды ? не говоря об ограничении на размер 
или необходимо помнить , что полученную строку надо скопировать ?!  smile 

Автор: andrew_121 23.2.2009, 02:23
mes, Функция делает то что должна. Остальное автор темы может поправить...я так думаю...

Автор: mes 23.2.2009, 02:57
Цитата(andrew_121 @  23.2.2009,  01:23 Найти цитируемый пост)
mes, Функция делает то что должна. Остальное автор темы может поправить...я так думаю... 

будем надеяться.. хотя в душе кажется, что  этот способ будет взят на вооружение  smile 

Автор: andrew_121 23.2.2009, 03:00
mes, Исправил.

Автор: Dende-Soft 23.2.2009, 06:36
Ой... спасибо огромное... 
Не забуду....
Простите за беспокойство.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)