C 函数来匹配字符串的最后一个字符

C 函数来匹配字符串的最后一个字符,c,pointers,char,C,Pointers,Char,所以这是一个问题:编写函数strend(s,t),如果字符t出现在字符串s的末尾,则返回1,否则返回0 这是我的代码: int strend(char*, char); int main() { int n = -1; char str1[6] = "Hello", char1; printf("Enter a character: "); char1 = getchar(); n = strend(str1, char1); printf("n

所以这是一个问题:编写函数strend(s,t),如果字符t出现在字符串s的末尾,则返回1,否则返回0

这是我的代码:

int strend(char*, char);
int main()
{

    int n = -1;
    char str1[6] = "Hello", char1;
    printf("Enter a character: ");
    char1 = getchar();
    n = strend(str1, char1);
    printf("n = %d", n);
    return 0;

}

int strend(char* str1, char str2)
{
    while(*str1 != '\0')
    {
        str1++;
    }

    if(*str1 == str2)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
但是,字符匹配没有按预期执行。哪里出了错?
谢谢。

您正在将字符与
\0
字符串终止符进行比较

int strend(char* str1, char str2)
{
    if (*str1 == '\0') {
        return 0;
    }

    while(*str1 != '\0') /* removed ; that shouldn't be there */
    {
        str1++;
    }
    /* at this point, str1 is pointing to the 0-terminator */

    str1--; /* pointer now points to last character of the string, not 0-terminator */

    if(*str1 == str2)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

我试试我自己的解释。
假设
while()
循环已到达字符串的最后一个非零字符
str1

在本例中,
while(*str1!='\0')
行“询问”此字符是否为零。
因为它是您要查找的字符,所以从逻辑上讲,它不能是
'\0'

然后比较表达式为“true”,增量
str1++已执行。
现在
*str1
是字符
'\0'
,下一次迭代计算
*str1!='\0'

   // Option 1
   str1--; 
   if(*str1 == str2)

   //Option 2
   if ((str1 - 1) == str2)
然后
while()
块完成,程序在
if(*str1==str2)

这里,将值
*str1
,即
'\0'
,与
str2
进行比较,结果总是“false”

但是,所需的字符仍位于前一个存储位置的
str1

因此,您可以减少str1,然后进行比较,或者您可以将str2与str1-1进行比较

   // Option 1
   str1--; 
   if(*str1 == str2)

   //Option 2
   if ((str1 - 1) == str2)

在不进行任何错误检查的情况下,(您可以这样做),这里有一个单行程序,用于检查最后一个字符是否匹配:

int strend(char* str1, char str2)
{
    return ((str1[strlen(str1)-1]) == str2)?(1):(0);    
}
以更易读的形式:

int strend(char* str1, char str2)
{
    return ((str1[strlen(str1)-1]) == str2);    
}

注意:问题要求您检查一个字符串,而不是一个字符。@Klaslindbkäck您是最正确的,没有注意到@BLUEPIXY这是一个意外的打字错误,谢谢!为了帮助他人帮助您,请使用示例输入和代码输出(以及预期输出)说明您的代码如何未按预期执行。我仍然没有得到任何输出:(@Debojyoti)while loop之后你是否也删除了
?@antoh它现在可以工作了!我最初是如何得到它的:OThanks@Debojyoti我在第一次通读时错过了它。抓住它是因为昆汀让我编辑我的问题:)与其把它写成一行不可读的代码,我建议你把它写成多行。另外,
?:
是多余的杂乱,
=
的结果已经是1或0(本质上是一个布尔值)。
size\u t length=strlen(str1);返回str1[length-1]==str2;
@Lundin-编辑(使用更可读的选项),但是,答案的目的是显示一行,并显示其他更简单的可能性。我碰巧喜欢?:运算符:)但是您是对的,我可以返回表达式。谢谢。