簡體   English   中英

匹配字符串最后一個字符的函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM