1

Тема: Як прибрати усі пробіли у рядку?

Чи є якась функція? :)

2

Re: Як прибрати усі пробіли у рядку?

print('aa bb       cc'.replace(' ', ''))
Подякували: Monolith, koala2

3

Re: Як прибрати усі пробіли у рядку?

*DRINK*

4

Re: Як прибрати усі пробіли у рядку?

А чому, як гадаєте, цей сайт так зветься?

5

Re: Як прибрати усі пробіли у рядку?

koala написав:

А чому, як гадаєте, цей сайт так зветься?

Видалення прогалин у знаннях. гг.

Прихований текст

Іноді, аби оцінити красу високорівневих мов, треба брати, і відтворювати подібні велосипеди на С. Якраз вчора писав:

#include <stdio.h>
#include <string.h>

#define SPC ' '

void space_del(char *src) {
    char *t_src = src, *t = t_src;

    while (*t) {
        while (*t == SPC && *(t + 1) == SPC || *t == SPC && src[0] == SPC)
            t++;

        if (*t_src == *t)
            t_src++, t++;
        else
            *t_src++ = *t++;
    }

    *(t_src - (*(t_src - 1) == SPC ? 1 : 0)) = '\0';
}


int main() {
    char buf[] = "         a            bb              ccc             dddd       eeeee        ";

    printf("%s\n", buf);

    space_del(buf);

    printf("%s\n", buf);

    return 0;
}

Це вам не х#$к, х#$к і в продакшн :D У порівнянні з цим, пайтон - манна небесна, і питання по його апі - стає соромно задавати.
Не вистачає тільки грандіозних ідей, які можна відтворити. Здається, що пісні вже всі заспівано *DONT_KNOW*

Подякували: A.N.Onim1

6

Re: Як прибрати усі пробіли у рядку?

Пан любитель збочень... Ось вам два варіанти - з STL і без, обидва пряміші і простіші:

Прихований текст
void space_del_stl(char *src) {
    while( 1 )
    {
        char *spc = strchr( src, SPC );
        if( !spc )
        {
            break;
        }
        strcpy( spc, spc + 1 );
    }
}

void space_del(char *src) {
    char *tgt = src;
    do
    {
        if( *src != SPC )
        {
            *tgt++ = *src;
        }
    }while( *src++ );
}

7

Re: Як прибрати усі пробіли у рядку?

koala написав:

Пан любитель збочень... Ось вам два варіанти - з STL і без, обидва пряміші і простіші:

Прихований текст
void space_del_stl(char *src) {
    while( 1 )
    {
        char *spc = strchr( src, SPC );
        if( !spc )
        {
            break;
        }
        strcpy( spc, spc + 1 );
    }
}

void space_del(char *src) {
    char *tgt = src;
    do
    {
        if( *src != SPC )
        {
            *tgt++ = *src;
        }
    }while( *src++ );
}

В моєму варіанті скорочення до одного пробілу, а не просто видалення:

"         a            bb              ccc             dddd       eeeee        "
=>
"a bb ccc dddd eeeee"

8 Востаннє редагувалося koala (28.04.2015 22:15:53)

Re: Як прибрати усі пробіли у рядку?

Kane написав:

В моєму варіанті скорочення до одного пробілу, а не просто видалення:

А автор не те просив.

Втім, в чому проблема?
void space_del_stl(char *src) {
    while( 1 ) {
        char *spc = strstr( src, "  " );
        if( !spc ) {
            break;
        }
        strcpy( spc, spc + 1 );
    }
}

9

Re: Як прибрати усі пробіли у рядку?

koala написав:
Kane написав:

В моєму варіанті скорочення до одного пробілу, а не просто видалення:

А автор не те просив.

Суть одна. Так-то ми вже вазагалі на іншу тему балакаєм, та на другій мові.

koala написав:
Втім, в чому проблема?
void space_del_stl(char *src) {
    while( 1 )
    {
        char *spc = strstr( src, "  " );
        if( !spc )
        {
            break;
        }
        strcpy( spc, spc + 1 );
    }
}

Залежності у вигляді strstr/strcpy, початок та кінець з пробілами, не то.

10

Re: Як прибрати усі пробіли у рядку?

Kane написав:

Залежності у вигляді strstr/strcpy, початок та кінець з пробілами, не то.

Це вже третє формулювання. Будь ласка, дайте нормальну умову того, що ви робите, а то що б не написали, вам буде "не те".

11

Re: Як прибрати усі пробіли у рядку?

koala написав:

Будь ласка, дайте нормальну умову того, що ви робите

Є рядок:

"         a            bb              ccc             dddd       eeeee        "

Завдання: треба вкоротити усі зайві пробіли до одного.
На пайтоні, наприклад, це можна зробити так (хоча мета і не відповідає вимогам ТС, гадаю, йому буде це корисно знати.):

s = '         a            bb              ccc             dddd       eeeee        '
print(' '.join(s.split()))

a bb ccc dddd eeeee

Ви сказали що я полюбляю збочення, не вникнувши в мого кода на C, і запропонували трішкизовсім інше три рази підряд.

12

Re: Як прибрати усі пробіли у рядку?

Вибачте, але практично єдиний спосіб написати код, що робить абсолютно те саме, що й інший код - це написати його ж. Ми ж обговорювали тут, як написати код, який виконує певне завдання. Ви собі вигадали інше завдання з іншими умовами - то будь ласка, але ж ми не про це говоримо.