[英]Finding last character of a string without a function in C
我想在不使用任何函数的情况下找到字符串的最后一个元素。
我的代码似乎可以工作,但是我不太确定为什么它会以这种方式工作,并且会为输入感到高兴。
这是代码。
#include <stdio.h>
char *find_last(char *s);
int main(void)
{
char string[] = {"This is an Example"};
find_last(string);
return 0;
}
char *find_last(char *s)
{
/* char last;*/
while (*s++ != 0) {}
printf("*s ist %c", *(s-2));
return 0;
}
我不明白为什么我必须打印*(s-2)而不是*(s-1)才能获得最后一个字符。 (为了获得更多的字符,我只需要再减小一个,即*(s-3))。
哦,此外,看来* s的内容似乎是字母O(直到现在为止,我对它的理解是零),与测试的示例字符串无关。 这是为什么? 我认为它应该为零(0),因为我增加了指针直到它达到二进制零。
谢谢你的帮助!
由于++
是后递增运算符,因此while
循环中会发生以下情况:
*s
与0
比较。 s
增加。 当s
到达字符串的末尾时,它指向空字符。 它递增以指向null 后的字符,然后循环退出。 在那时候:
*s
=空值后的字符,在您的情况下恰好是字母O
*(s-1)
=空字符。
*(s-2)
=字符串中的最后一个字符。
OP随后询问有关处理涉及""
的极端情况的问题。
首先建议明确目标“找到字符串的最后一个元素”。 根据定义:在C中,
字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。 C11§7.1.11
由于字符串包含一个空字符且该字符最后一个,因此“查找字符串的最后一个字符” 始终为空字符 。
当然,OP对空字符之前的最后一个字符感兴趣。 由于此类函数可能会收到有效的字符串 ""
,而无法找到此类字符,因此find_last()
可能会以某种方式出错,或者可能返回错误条件(例如下面的NULL
,并让调用者决定。
从类似OP的代码开始
char *find_last(char *s) {
printf("Last character before the null character in \"*s\"", s);
if (*s == '\0') {
printf(" does not exist.\n");
return NULL;
}
while (*s) {
s++;
}
s--;
printf(" is '%c'\n", *s);
return s;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.