c - C 中的字符串标记

标签 c string tokenize strtok

我在数组中有类似“− · · · −”(摩尔斯电码)的字符串,我想对每个字符串进行标记化以获取每个单独的点 (.) 和破折号 (−)。我的部分代码如下:

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 运行您的源代码并亲自看看。

据我所知,strcpy() 调用中的空格是 U+200Astrtok() 调用中的空格是 U+0020 .

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

相关文章:

c - 在 Windows 上查找 C 代码中的内存泄漏

Python - 密文长度必须等于 key 大小 - 将其传递到服务器后的不同字符串长度

java - 字符串和数字的范围分组列表

elasticsearch - Elasticsearch-将符号视为常规字符串并使文本不区分大小写

python - 如何标记 Python 中的收缩?

c - 引用指向字符数组的指针,一个 strtok 工作示例

c++ - 从 C++ 角度看 C 中的枚举

C:将x86指令放入数组并执行

c - 修复与通用指针相关的警告

linux - 如何将字符添加到 bash 中特定字符之间的字符串?