【发布时间】:2012-03-11 22:50:05
【问题描述】:
我试图将用户输入字符串解析为一个名为 char *entire_line[100]; 的数组;其中每个单词都放在数组的不同索引处,但如果字符串的一部分用引号封装,则应将其放在单个索引中。 所以如果我有
char buffer[1024]={0,};
fgets(buffer, 1024, stdin);
示例输入:“word filename.txt”这是一个字符串,应该在输出数组中占据一个索引”;
tokenizer=strtok(buffer," ");//break up by spaces
do{
if(strchr(tokenizer,'"')){//check is a word starts with a "
is_string=YES;
entire_line[i]=tokenizer;// if so, put that word into current index
tokenizer=strtok(NULL,"\""); //should get rest of string until end "
strcat(entire_line[i],tokenizer); //append the two together, ill take care of the missing space once i figure out this issue
}
entire_line[i]=tokenizer;
i++;
}while((tokenizer=strtok(NULL," \n"))!=NULL);
这显然是行不通的,只有当双引号封装的字符串位于输入字符串的末尾时才会关闭 但我可以 输入:单词“这是用户输入的文本” filename.txt 一直试图解决这个问题,总是卡在某个地方。 谢谢
【问题讨论】:
-
您需要考虑的另一件事是数据可能需要包含双引号字符,因此您可能必须对该字符进行某种转义。当然,在基本的带引号的字符串工作正常之前,可以推迟该支持,但请记住这一点......