int isPalindrome(char *str)
{
static int length = strlen(str);
if (length < 1)
return 1;
if (str[0] == str[length - 1])
{
length -= 2;
return isPalindrome(str + 1);
}
else return 0;
}
int main() {
char word[25];
printf("Please enter a word: ");
scanf("%s", word);
if (isPalindrome(word))
printf("%s is Palindrome", word);
else
printf("%s isn't Palindrome", word);
return 0;
}
我运行此代码后。
它有错误ERROR: Initializer is not a constant
。
在这条线上。
我该怎么办?
static int length = strlen(str);
该函数必须有1个参数(输入字符串)==&gt; isPalindrome(char * str)
答案 0 :(得分:1)
static
就像一个全局变量。您无法将动态值分配给全局变量。您只能将常量值分配给全局变量。
所以试试这个,
static int length;
length = strlen(str);
然后在您的情况下,您不需要将该变量设为static
。
已编辑的代码
int isPalindrome(char *str)
{
int length = strlen(str);
while(1){
if (length < 1)
return 1;
if (str[0] == str[length - 1])
{
length -= 2;
str+=1;
}
else return 0;
}
}
int main() {
char word[25];
printf("Please enter a word: ");
scanf("%s", word);
if (isPalindrome(word))
printf("%s is Palindrome", word);
else
printf("%s isn't Palindrome", word);
return 0;
}
答案 1 :(得分:1)
具有静态存储持续时间的任何对象只能使用常量表达式进行初始化。 strlen(str)
不是一个常量表达式。
§6.7.9,初始化
初始化程序中具有静态或。的对象的所有表达式 线程存储持续时间应为常量表达式或字符串 文字。
相反,您可以删除static
限定符并通过简单地使用其他变量重写逻辑:
int isPalindrome(char *str, size_t st, size_t end)
{
if (st >= end) return 1;
return (str[st] == str[end]) && isPalindrome(str, st+1, end-1);
}
并致电:
if (isPalindrome(word, 0, strlen(word) - 1))
在现有实现中,您需要更改NUL终结符并删除static
:
int isPalindrome(char *str)
{
int length = strlen(str);
if (length < 1)
return 1;
if (str[0] == str[length - 1])
{
str[length - 1] = '\0';
length -= 2;
return isPalindrome(str + 1);
}
else return 0;
}
复制word
并传递它:
char temp[25];
strcpy(temp, word);
if (isPalindrome(temp)) {
答案 2 :(得分:0)
int isPalindrome(char *str)
{
int length = strlen(str);
if (length <= 1)
return 1;
if (str[0] == str[length - 1])
{
str[length - 1] = '\0';
length -= 2;
return isPalindrome(str + 1);
}
else return 0;
}
int main() {
char word[25];
printf("Please enter a word: ");
scanf("%s", word);
if (isPalindrome(word))
printf("%s is Palindrome\n", word);
else
printf("%s isn't Palindrome\n", word);
system("pause");
return 0;
}
这段代码是OKAY。 但它有一点点错误。
Please enter a word: abcba
abc is Palindrome
答案是对的。 但字符串不正确 (我无法编辑主要内容。我只能编辑其他功能)