调用 void 函数?

Calling a void function?

我正在尝试编写一个可以识别回文的程序。

我做了一个识别是否回文的函数,在main中成功使用了

但是,我还想删除任何空格、数字或特殊字符,因为它们可能会干扰将其识别为一个。

我试过在 main 中用 inputstring(isalphabet) 调用它,但它根本无法编译。还尝试将 isalphabet 更改为 char 而不是 void,并给它 return inputstring 但它不起作用。任何和所有建议表示赞赏

#include <stdio.h>

int isPalindrome(char inputString[]);

int main() {
    char inputString[100];   
    int ret;

    scanf("%s", inputString);
    
    ret = isPalindrome(inputString);

    printf("%d", ret);
}

int isPalindrome(char inputString[]) {
    int count = 0;
    int result;

    while (inputString[count] != '[=10=]') {
        count++;
    }

    char stcp[100];
    int i = count, j = 0;

    while (i != 0) 
        stcp[j++] = inputString[--i];

    stcp[j] = 0;

    if (strcmp(inputString, stcp) == 0) {
        result = 1;
    }
    else {
        result = 0;
    }

    return result;   
}

void isalphabet(char inputString[], char nystring[]) {
    int count, i, ny_i = 0;
    count = strlen(inputString);

    for (i = 0; i < count; i++) {
        if (isalpha(inputString[i]) != 0) {
            nystring[ny_i] = inputString[i];
            ny_i++;
        }

        nystring[ny_i] = '[=10=]';  
    }
}

使用幻数100的辅助数组

char stcp[100];

是个坏主意。用户可以向函数传递任意长度的字符串,可以大于 100。

看来你需要的是下面这样的东西。

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

int isPalindrome( const char *s, int cmp( int ) )
{
    int palindrome = 1;
    
    const char *p =  s + strlen( s );
    
    while ( palindrome && s < p )
    {
        if ( !cmp( ( unsigned char )*s ) )
        {
            ++s;
        }
        else if ( !cmp( ( unsigned char )*--p ) )
        {
            ;
        }
        else
        {
            palindrome = *s++ == *p;    
        }
    }
    
    return palindrome;
}

int main(void) 
{
    printf( "%d\n", isPalindrome( "1a12b123c1234b12345a123456", isalpha ) );
    printf( "%d\n", isPalindrome( "1a2bc3def2gh1i", isdigit ) );
    
    return 0;
}

程序输出为

1
1