【发布时间】:2017-06-12 13:27:25
【问题描述】:
我想知道为什么结果不正确。 如果我输入字符串来测试字符串是否为回文, 每次尝试的结果都是一样的。
例如,如果我输入“dad”进行测试,这表明它不是回文。 但是,如果我输入“god”,它仍然显示这不是回文。
我不知道如何以正确的方式解决此问题... 请让我知道我该怎么做。
谢谢。
(以下代码)
#include <stdio.h>
#include <string.h>
void isPalindrome(char *str, int n);
int main() {
char str[100];
int n = strlen(str);
char choice;
printf("Will you run this program? : ");
scanf("%c", &choice);
getchar();
while (choice == 'Y' || choice == 'y') {
isPalindrome(str, n);
printf("Retry? : ");
scanf("%c", &choice);
getchar();
}
}
void isPalindrome(char *str, int n) {
int flag = 1;
printf("Type strings : ");
gets_s(str, 100);
for (int i = 0; i < n / 2; i++) {
if ('A' <= str[i] && str[i] <= 'Z') {
str[i] = str[i] - 'A' + 'a';
}
if (strlen(str) / 2 == 0) {
if (str[i] != str[n - i - 1]) {
flag = 0;
break;
}
} else
if (strlen(str) / 2 != 0) {
if (str[i] != str[n - i]) {
flag = 0;
break;
}
}
}
if (flag == 1) {
printf("%s is a palindrome \n", str);
} else {
printf("%s is not a palindrome \n", str);
}
}
【问题讨论】:
-
现在是学习如何使用调试器的好时机。
-
(strlen(str) / 2 == 0)没有意义。也许你的意思是(strlen(str) %% 2 == 0)? -
"你会运行这个程序吗?" -- 但是……但是……我不是已经这样做了吗?
-
当你给它字符串
b时这个工作吗?它打印b is a palindrome吗?如果是,那么我可能在我之前的评论中发现了你的错误。 -
strinmain()是一个未初始化的数组。因此,调用strlen(str)具有未定义的行为。这发生在第一个printf()之前和调用IsPalindrome()之前。
标签: c string palindrome