溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎樣計算字符串最后一個單詞的長度

發布時間:2021-12-28 00:03:37 來源:億速云 閱讀:236 作者:柒染 欄目:開發技術
# C語言怎樣計算字符串最后一個單詞的長度

在C語言編程中,處理字符串是常見的任務之一。計算字符串中最后一個單詞的長度是一個典型的字符串操作問題,涉及指針操作、循環控制和邊界條件處理。本文將詳細介紹如何用C語言實現這一功能,并提供完整的代碼示例。

## 問題分析

要計算字符串中最后一個單詞的長度,首先需要明確以下幾點:

1. **單詞的定義**:通常指由非空格字符組成的連續序列,以空格或字符串結束符`\0`為分隔。
2. **邊界情況**:字符串可能以空格結尾,或整個字符串為空。
3. **遍歷方向**:從字符串末尾向前遍歷效率更高,可以避免不必要的完整掃描。

## 實現步驟

### 方法一:從后向前遍歷

這是最高效的實現方式,時間復雜度為O(n),空間復雜度為O(1)。

```c
#include <stdio.h>
#include <string.h>

int lastWordLength(const char *str) {
    int len = 0;
    int i = strlen(str) - 1;  // 從字符串末尾開始
    
    // 跳過末尾的空格
    while (i >= 0 && str[i] == ' ') {
        i--;
    }
    
    // 計算最后一個單詞的長度
    while (i >= 0 && str[i] != ' ') {
        len++;
        i--;
    }
    
    return len;
}

int main() {
    char str[] = "Hello World   ";
    printf("Last word length: %d\n", lastWordLength(str));  // 輸出5
    return 0;
}

方法二:使用strtok分割(不推薦)

雖然可行,但會修改原字符串且效率較低:

#include <stdio.h>
#include <string.h>

int lastWordLengthStrtok(char *str) {
    char *token = strtok(str, " ");
    char *last = NULL;
    
    while (token != NULL) {
        last = token;
        token = strtok(NULL, " ");
    }
    
    return last ? strlen(last) : 0;
}

關鍵點說明

  1. 跳過末尾空格
    使用while (i >= 0 && str[i] == ' ')確保從最后一個非空格字符開始計數。

  2. 邊界處理

    • 空字符串返回0
    • 全空格字符串返回0
    • 常規情況如"fly me to the moon "應返回4(”moon”)
  3. 性能優化
    從后向前遍歷比分割字符串或多次調用strlen更高效。

完整測試用例

void testCases() {
    struct TestCase {
        char *input;
        int expected;
    } cases[] = {
        {"Hello World", 5},
        {"   fly me   to   the moon  ", 4},
        {"luffy is still joyboy", 6},
        {"", 0},
        {"    ", 0},
        {"a", 1}
    };
    
    for (int i = 0; i < sizeof(cases)/sizeof(cases[0]); i++) {
        int result = lastWordLength(cases[i].input);
        printf("Test '%s': %s (Expected %d, Got %d)\n",
               cases[i].input,
               result == cases[i].expected ? "PASS" : "FL",
               cases[i].expected,
               result);
    }
}

常見錯誤

  1. 未處理末尾空格
    直接反向計數會導致統計到空格。

  2. 數組越界
    忘記檢查i >= 0可能導致訪問非法內存。

  3. 空指針問題
    如果傳入NULL指針應添加保護:
    if (!str) return 0;

擴展思考

  • 如果需要統計每個單詞的長度,可以結合指針數組實現
  • 在C++中可以使用std::stringfind_last_not_of簡化操作
  • 類似思路可用于其他字符串尾部操作,如刪除末尾空格

總結

通過從字符串末尾逆向遍歷的方式,可以高效計算出最后一個單詞的長度。關鍵點在于正確處理邊界條件和空格跳過邏輯。該算法在LeetCode等編程題庫中屬于基礎字符串操作題,掌握后對理解指針操作和字符串處理有很大幫助。

提示:實際編程中建議添加輸入驗證,并考慮使用size_t代替int以兼容超長字符串。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女