Функция C для разделения строки в массиве символов - PullRequest
1 голос
/ 01 декабря 2010

Я хочу создать функцию для разделения текста с использованием разделителя на C. Два параметра text и separator будут переданы в функцию, и функция должна вернуть array of chars.

Например, если строка - Hello Word of C, а разделитель - white space.

, тогда функция должна вернуть

 0. Hello 
 1. Word  
 2. of 
 3. C

в виде массива символов.* Есть предложения?

Ответы [ 4 ]

4 голосов
/ 01 декабря 2010

strtok не соответствует вашим потребностям?

1 голос
/ 02 декабря 2010

Ну, то же решение, что и у abelenky, но без бесполезного дерьма и обфускации тестового кода (когда что-то, например printf, нужно написать дважды, я не ввожу фиктивный логический код, чтобы избежать этого, не читалкак то где-то?)

#include<stdio.h>

char* SplitString(char* str, char sep)
{
    return str;
}

main()
{
    char* input = "Hello Word of C";
    char *output, *temp;
    char * field;
    char sep = ' ';
    int cnt = 1;
    output = SplitString(input, sep);

    field = output;
    for(temp = field; *temp; ++temp){ 
       if (*temp == sep){
          printf("%d.) %.*s\n", cnt++, temp-field, field);
          field = temp+1;
       }
    }
    printf("%d.) %.*s\n", cnt++, temp-field, field);
}

Протестировано с gcc под Linux:

1.) Hello
2.) Word
3.) of
4.) C
1 голос
/ 01 декабря 2010

Как уже сказал кто-то другой: не ожидайте, что мы напишем код вашей домашней работы, но вот подсказка: (если вам разрешено изменять входную строку) Подумайте, что здесь происходит:

char *str = "Hello Word of C"; // Shouldn't that have been "World of C"???
str[5] = 0;
printf(str);
0 голосов
/ 02 декабря 2010

Мое решение (с учетом комментариев @kriss)

char* SplitString(char* str, char sep)
{
    char* ret = str;
    for(ret = str; *str != '\0'; ++str)
    {
        if (*str == sep)
        {
            *str = '\001';
        }
    }
    return ret;
}

void TestSplit(void)
{
    char* input = _strdup("Hello Word of C");
    char *output, *temp;
    bool done = false;

    output = SplitString(input, ' ');

    int cnt = 1;
    for( ; *output != '\0' && !done; )
    {
        for(temp = output; *temp > '\001'; ++temp) ; 
        if (*temp == '\000') done=true;
        *temp = '\000';
        printf("%d.) %s\n", cnt++, output);
        output = ++temp;
    }
}

Протестировано в Visual Studio 2008

Вывод:

1.) Hello
2.) Word
3.) of
4.) C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...