需要帮助解析字符串

时间:2011-08-05 00:25:32

标签: c parsing

解析一行文字我需要一些帮助。正在解析的文本行是用户输入。

我正在尝试解析其中有管道的东西。

例如:hello world |一两个

我可以在管道之前获取进入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 个答案:

答案 0 :(得分:3)

尝试使用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()容易出错,因此请谨慎使用。

答案 1 :(得分:3)

我会做这样的事情:

#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;
}

注意: 现在可以按照自己的方式找出想要的方式。