[英]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.