001-字符串最后一个单词的长度

本文介绍了一个简单的C语言程序,用于计算给定字符串中最后一个单词的长度。该程序通过从字符串末尾开始查找,直到遇到空格或字符串开始为止,从而确定最后一个单词的长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • /*
    001-字符串最后一个单词的长度
    
    题目描述
    
    计算字符串最后一个单词的长度,单词以空格隔开。
    输入描述 
    一行字符串,非空,长度小于5000。
    
    输出描述
    
    整数N,最后一个单词的长度。
    输入例子
    
    hello world
    输出例子
    
    5
    */ 
    #include <stdio.h>
    #include <string.h>
    int count(char * p);
    int main()
    {   
        char string[5000];
    	gets(string);
    	count(string);
    	return 0;
    } 
    
    int count(char * p)
    {
    	int count = 0;
    	int leng;
        int i;
    	leng = strlen(p);
    	for(i=leng-1;p[i] != ' ' && i >=0;i--)
    	{
    		count++;
    	}
    	printf("%d\n",count);
    	return 0; 
    }


<think>嗯,用户想知道怎么用编程语言计算字符串最后一个单词长度。我之前处理过类似的问题,记得Python中有几种方法可以实现。让我仔细想想。 首先,用户的需求是输入一个字符串单词之间用空格分隔,要找出最后一个单词长度。比如输入“hello nowcoder”,输出应该是8,因为最后一个单词是“nowcoder”。 根据引用中的资料,解法一可能用split方法。比如把字符串按空格分割成列表,然后取最后一个元素,再计算长度。但要注意处理前后空格的情况,比如字符串末尾可能有多个空格,或者没有空格结尾。这时候可以用strip()函数先去掉前后空格,再分割,这样就不会因为末尾的空格导致最后一个元素是空字符串了。 另外,引用提到解法二用反向遍历字符串,找到第一个空格的位置,然后计算最后一个单词长度。这种方法可能更高效,特别是当字符串很长时,因为不需要分割整个字符串,只需要从后往前找到第一个空格的位置,然后计算长度。这在处理大字符串时可能更节省时间和内存。 比如,假设字符串是s,从最后一个字符开始,跳过末尾可能的空格,然后从那里开始计数,直到遇到空格或者到达字符串开头为止。这时候计数的次数就是最后一个单词长度。 然后,用户可能想知道具体如何实现这两种方法。我需要给出Python的代码示例,并解释每一步的作用。 比如,对于split方法,代码可以是这样的:先用strip()去掉前后空格,然后用split(' ')分割,取最后一个元素,返回其长度。不过要注意,split默认分割多个空格为多个空字符串,但用split()不带参数的话会自动处理多个空格,但用户的情况是明确用空格分隔,所以可能需要明确处理。或者使用split()默认按任意空格分割,这样更安全。 比如,s.strip().split()[-1]的长度。split()不带参数的话,会按任意空白符分割,并且忽略前后的空格,这样可能更可靠,不管中间有多少空格或者末尾有没有空格。比如,输入如果是“ hello world ”,strip之后变成“hello world”,split()按空白分割成['hello', 'world'],所以最后一个元素是world,长度5。 另外,在解法二中,需要反向遍历。可以用一个循环,从最后一个字符开始,跳过末尾的空格,然后开始计数,直到遇到空格或者开头。比如: 初始化length为0,从索引-1开始,循环直到字符不是空格,然后继续循环直到遇到空格或开头,每次length加一。这样得到的length就是最后一个单词长度。 或者,可以用字符串的rfind方法来找最后一个空格的位置。例如,先strip掉末尾空格,然后找到最后一个空格的位置,然后用总长度减去该位置减一。比如,处理后的字符串是s,总长度是n,最后一个空格的位置是i,那么最后一个单词长度是n - i -1。如果没有空格,说明整个字符串就是一个单词长度就是n。 比如,代码可以是: s = s.strip() last_space = s.rfind(' ') if last_space == -1: return len(s) else: return len(s) - last_space -1 这样可能更简洁。 用户可能还会关心边界情况,比如字符串全是空格,或者只有一个单词的情况。这时候需要测试这些情况,确保代码的鲁棒性。 总结下来,两种方法各有优劣。split方法简单直接,适用于大多数情况,尤其是字符串不太大的时候。反向遍历可能在处理大字符串时更高效,因为它不需要分割整个字符串。 另外,需要提醒用户注意输入字符串长度是否符合要求,比如是否超过5000字符,这时候需要做检查,如引用中的代码那样。 最后,应该给出示例代码,并解释每种方法的步骤,然后比较它们的优缺点,帮助用户根据实际情况选择合适的方法。</think>### 计算字符串最后一个单词长度的方法 要计算字符串最后一个单词长度,可以通过以下两种常用方法实现: #### 方法一:字符串分割法(简单直接) 1. **去前后空格**:使用`strip()`去除字符串首尾的空格,避免末尾空格干扰 2. **分割单词**:按空格分割字符串生成列表 3. **取最后一个元素**:获取列表最后一个元素并计算其长度 **Python实现**: ```python def get_last_word_length(s): s = s.strip() # 去除首尾空格 words = s.split() # 按空格分割(自动处理连续空格) if not words: # 处理空字符串 return 0 return len(words[-1]) ``` #### 方法二:反向遍历法(高效省内存) 1. **去尾部空格**:从字符串末尾向前遍历,跳过所有尾部空格 2. **统计字符**:从第一个非空格字符开始计数,直到遇到空格或字符串开头 **Python实现**: ```python def get_last_word_length(s): length = 0 i = len(s) - 1 # 跳过末尾的空格 while i >= 0 and s[i] == ' ': i -= 1 # 统计最后一个单词长度 while i >= 0 and s[i] != ' ': length += 1 i -= 1 return length ``` #### 方法对比 | 方法 | 优点 | 缺点 | |----------|-------------------------|---------------------| | 字符串分割法 | 代码简洁,易理解 | 内存占用高(需生成列表) | | 反向遍历法 | 内存高效,时间复杂度低($O(n)$) | 代码逻辑略复杂,需处理边界条件[^3] | --- ### 相关问题 1. 如果字符串中全是空格,这两种方法会返回什么结果? 2. 如何优化反向遍历法以兼容不同编程语言的实现? 3. 在内存受限的场景下,哪种方法更适合处理超长字符串? 引用[^1]: 输入字符串末尾不以空格为结尾,但需处理用户可能的输入错误。 引用[^2]: 使用`split()`时默认处理连续空格,避免生成空字符串元素。 引用[^3]: 反向遍历法通过索引直接操作字符串,减少额外内存消耗。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值