繁体   English   中英

我的回文检查器有什么问题?

[英]What is wrong with my palindrome checker?

我试图通过检查每个字符是否始终等于其“对应物”来检查字符串是否为回文:

int isPalindrone(char *inputString) {
    int string_size = sizeof(inputString);
    int string_length = strlen(inputString);
    int stop = (string_length / 2) - 1;
    int char_size = sizeof(char);
    char *counterpart, idx; // pointer arithmetic: pointers inherently know their own size
    // counterpart of first char is last char
    counterpart = inputString + string_length - 1;

    for (idx = 0; idx <= stop; idx++) {
        if (*inputString != *counterpart) {
            return 0;
        }
        inputString += 1;
        counterpart -= 1;
    }
    return 1;
}

您使用的变量比您真正需要的要多得多。

您正在使用指针算术,因此您可以使用指针来检查条件:

int isPalindrone(char *inputString) {
    char *counterpart = inputString + strlen(inputString) - 1;
    while(inputString < counterpart)
    {
        if(*inputString != *counterpart)
            return 0;
        inputString++; 
        counterpart--;
    }
    return 1;
}

或者您可以将对应的内容放在 for 循环中:

int isPalindrone(char *inputString) {
    for(char *counterpart = inputString + strlen(inputString) - 1; inputString < counterpart; inputString++, counterpart--)
       if(*inputString != *counterpart)
            return 0;
    return 1;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM