gpt4 book ai didi

c - 扫描字符串中的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:34 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,使用 fgets() 从文件中读取一行。读完线,我想把线拆开,做成更小的字符串。根据行中的第一个单词,我读入的行可能包含 3-5 个较小的字符串,这些字符串由空格分隔。

例子:行:删除苹果 12345字符串 1:删除字符串 2:苹果字符串 3:12345

线:加番茄红叶字符串 1:添加字符串 2:番茄字符串 3:红色string4: 叶子

从上面的例子来看,如果第一个字符串被删除,我需要读取另外两个字符串(苹果,12345)。如果添加了第一个字符串,我需要读取其他 3 个字符串(tomato、red、leaf)。

无论如何,我可以决定使用 sscanf 读取和执行此操作的次数吗?

while( fgets( buf, sizeof buf, course_file ) != NULL ){
sscanf( buf, "%s", &string1);
printf( "%s\n", buf );
}

我不是必须使用 sscanf,我愿意接受其他建议。

最佳答案

通常用于标记字符串的函数是strtok,但它不是线程安全的;它的现代版本是strtok_r应该改用。

在第一次调用时开始对 buf 进行分词,检查第一个分词,然后根据第一个分词的内容进入几个循环之一:

while( fgets( buf, sizeof buf, course_file ) != NULL ) {
char *saveptr;
char *tok = strtok_r(buf, " ", &saveptr);
if (!strcmp(tok, "delete")) {
for (int i = 0 ; i != 3 ; i++) {
tok = strtok_r(NULL, " ", &saveptr);
// Do something with the token...
}
} else if (!strcmp(tok, "add")) {
for (int i = 0 ; i != 4 ; i++) {
tok = strtok_r(NULL, " ", &saveptr);
// Do something else with the token...
}
} else {
// Error
}
}

关于c - 扫描字符串中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com