C 函数来匹配字符串的最后一个字符
所以这是一个问题:编写函数strend(s,t),如果字符t出现在字符串s的末尾,则返回1,否则返回0 这是我的代码: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
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-编辑(使用更可读的选项),但是,答案的目的是显示一行,并显示其他更简单的可能性。我碰巧喜欢?:运算符:)但是您是对的,我可以返回表达式。谢谢。