回文,降低功能

Palindrome, to lower function

目前学校布置了一个 C 程序来检查用户输入的字符串是否为回文。该程序需要有 2 个不同的函数(不包括主要函数),一个是检查字符串是否为回文,另一个是使程序将大写字母识别为小写字母。示例:程序将 "wow" 和 "Wow" 都识别为回文,目前它只识别第一个而不识别第二个。我目前不知道如何进行,非常感谢帮助。

这是我的代码目前的样子:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define _CRT_SECURE_NO_WARNINGS


int checkPalindrome(char* text) 
{
    int i, c = 0, l; 
    l = strlen(text); 
    for (i = 0; i < l / 2; i++)
    {
        if (text[i] == text[l - i - 1])
            c++; 

    }
    if (c == i)
        return 1; 
    else
        return 0; 
}

int setToLowercase()
{

}

int main()
{
    char text[1000]; 

    printf("Enter  the string: ");

    gets(text); 


    if (checkPalindrome(text)) 
        printf("string is palindrome"); 
    else
        printf("string is not palindrome"); 

    return 0;
}

如果允许,tolower() 会将字符转换为小写。循环字符串。

否则请查看 ascii 图表并找出 math/if 案例。

我设法用 tolower() 函数解决了 "problem"。谢谢

void setToLowercase(char *string)
{
    int i;
    for (i = 0; string[i]; i++) {
        string[i] = tolower(string[i]);
    }
}

对于根据 C 标准的初学者,不带参数的函数 main 应声明为

int main( void )

函数gets不是标准的C函数。这是不安全的。而是使用标准 C 函数 fgets.

函数checkPalindrome不改变传递的字符串。所以它的参数应该用限定符 const.

来声明
int checkPalindrome(const char* text);

函数 strlen 的 return 类型是 size_t。因此,接受函数值 return 的变量也应具有 size_t.

类型

要将字符转换为小写,请使用在 header <ctype.h>.

中声明的标准函数 tolower

下面有一个演示程序,展示了如何编写原始程序。

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

char setToLowercase( char c )
{
    return tolower( ( unsigned char )c );
}

int checkPalindrome( const char *s ) 
{
    size_t n = strlen( s );

    size_t i = 0;

    while ( i < n / 2 && setToLowercase( s[i] ) == setToLowercase( s[n-i-1 ] ) )
    {
        i++;
    }

    return i == n / 2;
}

int main(void) 
{
    while ( 1 )
    {
        enum { N = 1000 };
        char s[N]; 

        printf( "Enter a string (Enter - exit): " );

        if ( fgets( s, N, stdin ) == NULL || s[0] == '\n' ) break;

        //  remove the appended new line character '\n'
        s[ strcspn( s, "\n" ) ] = '[=12=]';

        printf( "The string is %spalindrome.\n",
                checkPalindrome( s ) ? "" : "not " );
        putchar ( '\n' );               
    }

    return 0;
}

程序输出可能看起来像

Enter a string (Enter - exit): AbCdEeDcBa
The string is palindrome.

Enter a string (Enter - exit): 

如果您使用 MS VS 编译器编译程序,那么您可以包含指令

#define _CRT_SECURE_NO_WARNINGS

函数 setToLowercase 也可以内联,例如

inline static char setToLowercase( char c )
{
    return tolower( ( unsigned char )c );
}