нужна помощь с разбором строки - PullRequest
0 голосов
/ 05 августа 2011

Мне нужна помощь с разбором строки текста. Анализируемая строка текста вводится пользователем.

Я пытаюсь разобрать что-то, в чем есть труба.

Например: привет мир | один два

Я могу получить слова перед тем, как труба войдет в ArgList. Но не могу понять, как получить слова после канала в ArgList2. Труба Symobol не нужно хранить где-либо.

В принципе, как мне получить следующее?

ArgList[0] = hello
ArgList[1] = world

ArgList2[0] = one
ArgList2[1] = two

int main(void)
{

char *ArgList[MAX_ARG_LENGTH];
char *ArgList2[MAX_ARG_LENGTH];

char buf[MAX_BUF_LENGTH];

int i = 0


printf("> ");

if(!fgets(str, MAX_BUF_LENGTH, stdin))
perror("fgets error");

ArgList[i] = strtok(bufstr, " \n");

while(ArgList[i] != NULL)
{
     printf("%s", ArgList[i]);

     i++;
     ArgList[i] = strtok(NULL, " \n");
 }

return 0;
}

Любые предложения будут оценены. Должен ли я сначала токенизировать всю пользовательскую строку ввода в ArgList, а затем переместить все после символа канала в ArgList2?

Как лучше всего это сделать?

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Я бы сделал что-то вроде этого:

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

int main(void)
{

char buf[30] = "hello world | one two";

char *str = buf;

char *str1 = strsep(&str, "|");
char *str2 = strsep(&str, "\n");

printf("\nstr1 = %s and str2 =%s \n", str1, str2);
return 0;
}

ПРИМЕЧАНИЕ: вы должны теперь выяснить, как вы хотите, чтобы ваш путь.

3 голосов
/ 05 августа 2011

Попробуйте использовать scanf().

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

int main()
{
    char args1[NUMBER_OF_RECORDS][MAX_BUF_LENGTH];
    char args2[NUMBER_OF_RECORDS][MAX_BUF_LENGTH];
    char buf[MAX_BUF_LENGTH];
    char buf2[MAX_BUF_LENGTH];
    int i = 0;

    while (scanf("%s | %s", buf1, buf2)) {
        strcpy(args1[i], buf1);
        strcpy(args2[i], buf2);
        i++;
    }
    /* Do something with args1 or args2 */
    return 0;

}

Нет гарантий, что этот код работает на 100% правильно. Кроме того, scanf() подвержен ошибкам, поэтому используйте его с осторожностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...