【问题标题】:strcmp confusion with string and arraystrcmp 与字符串和数组混淆
【发布时间】:2013-09-17 22:20:09
【问题描述】:

我有这段代码试图将莫尔斯电码翻译成字母:

#include <stdio.h>
#include <string.h>

#define BSIZE 15

char *morseToLetter(char *);


int main() {
    char *morseCode = ".... . .-.. .-.. --- / -.. .- .. .-.. -.-- / .--. .-. --- --. .-. .- -- -- . .-. / --. --- --- -.. / .-.. ..- -.-. -.- / --- -. / - .... . / -.-. .... .- .-.. .-.. . -. --. . ... / - --- -.. .- -.--";    
    char buffer[BSIZE] = { 0 };
    int bufferKey = 0;

    for(int i=0,t = strlen(morseCode)+1;i<t;i++) {
        if (morseCode[i] == '/') {
            printf(" ");
        }
        else {
            if (morseCode[i] == ' ') {
                if (strlen(buffer) == 0) {
                    continue;
                }

                printf("%s",morseToLetter(buffer));

                memset(buffer,0,BSIZE);
                bufferKey = 0;
            }
            else {
                buffer[bufferKey++] = morseCode[i];
            }            
        }        
    }

    if (strlen(buffer) > 0) {      
        printf("%s",morseToLetter(buffer));                
    }

    printf("\n");

    return 0;
}

char *morseToLetter(char *morseLetter) {
    static char morse[][BSIZE] = {
        "·–","A",
        "–···","B",
        "–·–·","C",
        "–··","D",
        "·","E",
        "··–·","F",
        "––·","G",
        "····","H",        
        "··","I",
        "·–––","J",
        "–·–","K",
        "·–··","L",
        "––","M",
        "–·","N",
        "–––","O",
        "·––·","P",
        "––·–","Q",
        "·–·","R",
        "···","S",
        "–","T",
        "··–","U",
        "···–","V",
        "·––","W",
        "–··–","X",
        "–·––","Y",
        "––··","Z"
    };
    static int morseTotal = sizeof(morse)/sizeof(morse[0]);

    for (int i = 0;i<morseTotal;i +=2) {        
        if (strcmp(morseLetter,morse[i]) == 0) {
            return morse[i+1];
        }
    }

    return '\0';
}

我遇到的问题是 strcmp(morseLetter,morse[i])

当我运行 gdb 时,我得到了这个:

if (strcmp(morseLetter,morse[i]) == 0) {

(gdb) 显示莫尔斯字母

1: morseLetter = 0x7ffffffffe4d0 "...."

(gdb) 显示莫尔斯[i]

2: 莫尔斯[i] = "·–\000\000\000\000\000\000\000\000\000"

因此,当它在莫尔斯中找到正确的字符串时,它显示为“····\000\000\000\000\000\000”,因此比较失败。我没有遵循这里的逻辑。我认为 C 中的字符串将是一个带有 \0 的数组。为什么会失败?

谢谢

【问题讨论】:

    标签: c strcmp morse-code


    【解决方案1】:

    您已使用中间点 · 定义了字母代码,但要解码的文本使用常规点 .

    strcmp 函数会认为这些字符不同,因为它们是不同的字符。

    【讨论】:

    • 是的。这是点混淆,而不是strcmp 混淆。 ;)
    • 刚刚发现在美式键盘中可以通过alt+250输入中间点。
    • 这就是我从网上复制和粘贴内容而不仔细查看时得到的结果。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多