因此,我必须做一个词汇表,scanf将始终读取一个字符和一些文本,第一个字符是我需要做的动作,例如擦除某些内容,包含或打印。另一部分是我将添加或删除的单词,其余所有都是含义。
有时,我只会收到char来执行操作,例如“全部打印”,或者我可以收到诸如“ e word含义”之类的东西以删除含义,但是我也可以接收“ e word”并消除相关的单词和含义,因此条目的大小并不总是相同。
进入案例是:
i word meaning
q word
e word
e word meaning
p
带有“含义”的蜂鸣声,例如“具有红色”
我尝试使用strtok和strcat将它们组合在一起以获得含义,但是没有成功,我在这里留下的这段代码只是一个示例,我知道这是行不通的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
char str[] = "a bbbbbbbbbb cccc ccccccccccc cccc";
char* temp;
char* rest = str;
int i = 0;
char op[2];
while ((temp = strtok_r(rest, " ", &rest))){
printf("%s ", temp);
if (i>=2){
strcat(op[2],temp);
}
op[i]=temp;
i++;
}
return(0);
}
动作:
字:bbbbbbbbbb
含义:cccc ccccccccccc cccc
最佳答案
如果a
和bbbbbbbbbb
不包含空格,请调用3次strtok()
:
char str[] = "a bbbbbbbbbb cccc ccccccccccc cccc";
char *op[3]; // Changed to char * and increased size
// Note: the last call to strok changes the delimiter
if (NULL != (op[0] = strtok(str, " "))) {
if (NULL != (op[1] = strtok(NULL, " "))) {
if (NULL != (op[2] = strtok(NULL, ""))) {
printf("%s / %s / %s\n", op[0], op[1], op[2]);
}
}
}
输出量
一个/ bbbbbbbbbb / cccc ccccccccccc cccc
或者,如果您更喜欢一行中的所有内容:
if ((op[0] = strtok(str, " ")) && (op[1] = strtok(NULL, " ")) && (op[2] = strtok(NULL, ""))) {
printf("%s / %s / %s\n", op[0], op[1], op[2]);
}