Как удалить символ

269
25 апреля 2017, 08:40

Как удалить символ в массиве *сhar с использованием пользовательской функции?

Answer 1

Ну, раз char*, а не string...

char * delChar(char * s, char q)
{
    for(char * c = s; *c; ++c)
    {
        while(*c == q)
            memmove(c,c+1,strlen(c)+1);
        if (*c == 0) break;
    }
    return s;
}
int main(int argc, const char * argv[])
{
    char s[] = "Hello, Dolly!";
    printf("%s\n",s);
    printf("%s\n",delChar(s,'o'));
    printf("%s\n",delChar(s,'!'));
}

Сойдет?

Если пугает memmove, можо

char * delChar(char * s, char q)
{
    for(char * c = s; *c; ++c)
    {
        while(*c == q)
        {
            char * q = c+1;
            while(*(q-1) = *q) ++q;
        }
        if (*c == 0) break;
    }
    return s;
}

Можно и за один проход:

char * delChar(char * s, char q)
{
    char * c = s, *t = s;
    for(; *t; ++t)
    {
        if (*t != q) *c++ = *t;
    }
    *c = 0;
    return s;
}
Answer 2

В C++ вы можете воспользоваться стандартным алгоритмом std::remove.Например

#include <iostream>
#include <algorithm>
#include <cstring>
int main() 
{
    char s[] = "Hello World";
    std::cout << s << std::endl;
    char c = 'o';
    *std::remove( s, s + std::strlen( s ), c )  = '\0';
    std::cout << s << std::endl;
    return 0;
}

Вывод программы на консоль

Hello World
Hell Wrld

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

#include <stdio.h>
char * remove_char( char *s, char c ) 
{ 
    char *q = s; 
    while ( *q && *q != c ) ++q; 
    char *p = q; 
    while ( *q ) 
    { 
        if ( *++q != c ) *p++ = *q; 
    } 
    return s; 
} 
int main(void) 
{
    char s[] = "Hello Wordl";
    puts( s );
    char c = 'o';
    puts( remove_char( s, c ) );
    return 0;
}

Вывод программы будет аналогичен, показанному выше, то есть

Hello Wordl
Hell Wrdl
READ ALSO
Регистрация сайта в поисковых системах

Регистрация сайта в поисковых системах

Добавление сайта в известные поисковые системы Google, Yandex, Bing, Yahoo, ...

2755
Рекурсивный двоичный поиск на С++

Рекурсивный двоичный поиск на С++

День добрыйРеализовал рекурсивный двоичный поиск, но время от времени переполняется стек

169
DataGridView WinForms, вопрос по оформлению

DataGridView WinForms, вопрос по оформлению

Уже облазил всю документацию (либо почти всю), стоит такой вопрос - как изменять размеры ячеек, не отдельно взятой а всех в dataGridView программно,...

234
Ошибка Cl.exe при постройке проекта

Ошибка Cl.exe при постройке проекта

Всем доброго вечераСобираю проект email [клиента] (http://www

287