我在数组中有类似“− · · · −”(摩尔斯电码)的字符串,我想对每个字符串进行标记化以获取每个单独的点 (.) 和破折号 (−)。我的部分代码如下:
char *code, *token;
char x;
char ch[4096];
code = &ch[0];
..
while((x = tolower(fgetc(fp))) != EOF){
printf("%c \n", x);
switch(x){
case 'a':
strcpy(code, "· −");
break;
case 'b':
strcpy(code, "− · · ·");
break;
case 'c':
strcpy(code, "− · − · ");
break;
case 'd':
strcpy(code, "− · ·");
break;
case 'e':
strcpy(code, "· ");
break;
case 'f':
strcpy(code, "· · − ·" );
break;
case 'g':
strcpy(code, "− − · ");
break;
case 'h':
}
if(x!= 10){
printf("Value read : %s \n", code);
token = strtok(code, " ");
while(token != NULL){
printf("CHARACTER: %s\n", token);
token = strtok(NULL, " ");
}
}
所以,当代码数组有“− − ·”时,我希望输出有:
CHARACTER: −
CHARACTER: −
CHARACTER: ·
然而,输出却有字符:- - · 我是字符串标记化的新手,可能在那里的某个地方犯了错误。也许我的定界符是错误的,我不确定。我希望我已经提供了足够的信息。对此的任何帮助将不胜感激。
提前致谢
最佳答案
问题在于字符串文字中的 (Unicode) 空白字符(例如“·········”)与 strtok()
调用中的空白字符不同。
通过 xxd
运行您的源代码并亲自看看。
关于c - C 中的字符串标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26103660/