温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言怎样计算字符串最后一个单词的长度

发布时间:2021-12-28 00:03:37 来源:亿速云 阅读:235 作者:柒染 栏目:开发技术
# 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