目的:检查字符串是否为回文类型
错误:第32行警告:函数的隐式声明‘palindrome’-Wimplicit- function -declaration
代码:
int palindrome(char[] A)
{
int i;
for(i = 0; A[i] != '\0'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
int j;
for(j=0; j<i ; i--, j++)
{
if(A[i] != A[j])
return 0;
}
return 1;
}
int main()
{
char A[] = "madam";
if(palindrome(A)) // Line of Error
printf("Yes, Palindrome");
else
printf("No!");
return 0;
}发布于 2021-08-02 10:43:03
该函数的声明
int palindrome(char[] A)是不正确的。看起来你是说
int palindrome(char A[])此外,函数应该像这样声明
int palindrome( const char A[])因为传递的字符串在函数中不会改变。
并且不要在标识符的名称中全部使用大写字母。我会像这样声明这个函数
int palindrome( const char *s )这是for循环
for(i = 0; A[i] != '\n'; i++) { }如果传递的字符串不包含换行符'\n'‘,则可以调用未定义的行为。
再说一次,你的意思是
for(i = 0; A[i] != '\0'; i++) { }最好将此循环替换为while循环,例如
int i = 0;
while ( A[i] != '\0' ) i++;此外,您应该使用类型size_t,而不是使用tp确定字符串的长度的类型int,因为通常情况下,类型int可能不足以存储字符串的可能长度。
在不使用标准C字符串函数的情况下,可以定义如下演示程序中所示的函数。
#include <stdio.h>
int palindrome( const char *s )
{
size_t first = 0;
size_t last = 0;
while ( s[last] ) ++last;
if ( first != last )
{
while ( first < --last && s[first] == s[last] ) ++first;
}
return !( first < last );
}
int main( void )
{
const char *s = "A";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "AA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "AB";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABBA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABCA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
return 0;
}程序输出为
"A" is a palindrome - true
"AA" is a palindrome - true
"AB" is a palindrome - false
"ABA" is a palindrome - true
"ABBA" is a palindrome - true
"ABCA" is a palindrome - false发布于 2021-08-02 10:44:53
modify the method parameter declaration i.e. char A[] not char[] A
#include <stdio.h>
#include <string.h>
int palindrome(char A[])
{
int i;
for(i = 0; A[i] != '\0'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
int j;
for(j=0; j<i ; i--, j++)
{
if(A[i] != A[j])
return 0;
}
return 1;
}
int main()
{
char A[] = "madam";
if(palindrome(A)) // Line of Error
printf("Yes, Palindrome");
else
printf("No!");
return 0;
}https://stackoverflow.com/questions/68620198
复制相似问题