您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 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;
}
虽然可行,但会修改原字符串且效率较低:
#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;
}
跳过末尾空格:
使用while (i >= 0 && str[i] == ' ')确保从最后一个非空格字符开始计数。
边界处理:
"fly me   to   the moon  "应返回4(”moon”)性能优化:
从后向前遍历比分割字符串或多次调用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);
    }
}
未处理末尾空格:
直接反向计数会导致统计到空格。
数组越界:
忘记检查i >= 0可能导致访问非法内存。
空指针问题:
如果传入NULL指针应添加保护:
if (!str) return 0;
std::string的find_last_not_of简化操作通过从字符串末尾逆向遍历的方式,可以高效计算出最后一个单词的长度。关键点在于正确处理边界条件和空格跳过逻辑。该算法在LeetCode等编程题库中属于基础字符串操作题,掌握后对理解指针操作和字符串处理有很大帮助。
提示:实际编程中建议添加输入验证,并考虑使用
size_t代替int以兼容超长字符串。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。