因此,我必须做一个词汇表,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

最佳答案

如果abbbbbbbbbb不包含空格,请调用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]);
}

08-16 02:54