[英]Function To Match The Last Character Of A String
所以這是一個問題:編寫函數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;
}
}
但是,字符匹配不能按預期執行。 哪里出錯了? 謝謝。
您正在將字符與\\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'
。
則比較expressionión為“ 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)
無需任何錯誤檢查,(您可以執行此操作)這里是一個襯紙 ,它將檢查最后一個字符是否匹配:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.