我发现这个代码用于将字符串转换为单独的字符串:
const char *s = " ,.?\n\0";
char *token;
/* get the first token */
token = strtok(buffer, s);
/* walk through other tokens */
while( token != NULL ) {
printf( " %s\n", token );
token = strtok(NULL, s);
包含字符串的缓冲区。
我现在遇到的问题是,我想要计算令牌(子字符串)出现次数并将其打印给用户。
有人可以帮忙吗?
答案 0 :(得分:2)
使用带有令牌及其计数器作为成员的结构,然后使用动态数组或列表或其他类似容器的数据结构,可以相对简单地完成。
当您阅读令牌时,查看您是否已将其保存,然后增加其计数器。否则加上一个计数。
答案 1 :(得分:0)
如果您只想计算buffer
中特定令牌的次数,并且令牌是strtok()
返回的自己的子串,则不会与{{}返回的其他字符串混在一起。 1}}
strtok()
如果你想计算int main(void) {
const char *s = " ,.?\n\0";
char *token;
char buffer[] = "123 456 789 456 123";
char myToken[] = "456";
int num = 0;
/* get the first token */
token = strtok(buffer, s);
/* walk through other tokens */
while (token != NULL) {
if (strcmp(token, myToken) == 0) {
num++;
}
token = strtok(NULL, s);
}
printf("%d\n", num);
}
返回的每个字符串的出现次数,那么你需要一些更复杂的东西,如SomeProgrammerDude的答案所述,来跟踪看到的每个字符串。