【问题标题】:Calling a void function?调用无效函数?
【发布时间】:2021-11-24 10:19:26
【问题描述】:

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

我已经做了一个函数来识别它是否是回文并成功地在 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] != '\0') {
        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] = '\0';  
    }
}

【问题讨论】:

  • 如果您询问有关构建错误的问题,请将 fullcomplete 错误输出复制粘贴到问题本身中。另外,请在出现错误的行上添加评论。
  • #include
  • inputstring(isalphabet) - 你是这样称呼它的吗? inputstring 是一个变量,isalphabet 是一个函数,所以它应该类似于 isalphabet(inputstring, nystring)
  • @notmenotyou 移动此语句 nystring[ny_i] = '\0';在 for 循环之外。
  • 旁注:你需要包含标题&lt;ctype.h&gt;才能使用isalpha()函数;另外,您需要将isalphabet() 的原型(即:void isalphabet(char[], char[]);)放在main() 之前,就像对isPalindrome() 所做的那样。

标签: c function-pointers c-strings palindrome function-definition


【解决方案1】:

使用魔数为 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

【讨论】:

    猜你喜欢
    • 2019-03-10
    • 2014-06-05
    • 1970-01-01
    • 2021-11-05
    • 2020-04-18
    • 2022-07-20
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多