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

时间:2014-06-18 13:42:30

标签: c pointers char

所以这是一个问题:编写函数strend(s,t),如果char 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;
    }
}

然而,字符匹配不能按预期执行。哪里出错? 感谢。

3 个答案:

答案 0 :(得分:2)

您正在将字符与\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;
    }
}

答案 1 :(得分:0)

我会尝试自己的解释 假设您的while()循环已到达字符串str1的最后一个非零字符 在这种情况下,行while( *str1 != '\0' )正在“询问”此字符是否为零 由于它是您正在寻找的角色,因此逻辑上它不能是'\0' 然后比较表达式为“true”,并执行增量str1++; 现在*str1是字符'\0',并且在评估*str1 != '\0'时,紧接的下一次迭代会给出“false”。

然后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)

答案 2 :(得分:0)

没有任何错误检查,(你可以这样做)这里有一个 one liner ,它会检查最后一个字符是否匹配:

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);    
}