删除空格:删除字符串首部和尾部连续的空格

这篇博客介绍了一种笔试题目,要求实现一个函数删除字符串首部和尾部连续的空格,不删除中间的空格。文章提供了两种方法:方法一是利用状态标记法,通过遍历字符串找到非空格字符的起始和结束位置,然后拷贝到新的字符串中;方法二是分别从字符串的头部和尾部找到非空格字符的位置,再进行拷贝。还包含了测试样例和实现代码。
摘要由CSDN通过智能技术生成

【笔试题目】
给定一个字符串,实现如下函数接口,删除其首部和尾部连续的空格。(注:夹在非空格字符之间的空格是合法的,不用删除。)

    char* delete_leading_trailing_whitespaces(char *output,  const char *input);

【测试样例】

编号 情况 输入 输出
1 空字符串 “” NULL
2 空格字符串 " " NULL
3 首尾无空格 “Hello World” “Hello World”
4 首部有空格 " Hello World" “Hello World”
5 尾部有空格 "Hello World " “Hello World”
6 首尾有空格 " Hello World " “Hello World”

【方法一】状态标记法

【基本思路】找到output的头(start)和尾(end)在input中的指针位置,然后把start到end的所有字符拷贝到output中。
此外,在遍历处理input的过程中,维护一个状态变量state,用于标记当前处理状态是否处于空格字符串状态,其定义如下:

	enum {
   
		STATE_OUT, /* 值为0,表示当前状态处于非空格字符串状态 */
		STATE_IN, /* 值为1,表示当前状态处于空格字符串状态 */
	} state;

1、找出output的头

我们知道,通过下面这个循环,可以跳过字符串首部的空格。当跳出循环时,指针指向input的第一个非空格字符。

	while (*input == ' ')
	{
   
		input++;
	}

如果该非空格字符是尾零’\0’,那么表明input是空格字符串,此时output应该返回NULL;

	if (*input == '\0)
	{
		output = NULL;
		return output;
	}

否则,该非空格字符就是output的首个字符。此时,设置状态变量state为STATE_OUT状态,表示当前指针处于非空格状态,并且记录下当前指针位置start。

2、循环处理剩余的部分。

当指针指向空格字符时,标记当前状态为STATE_IN状态,表示当前指针处于连续的空格状态;
当指针指向非空格状态时,状态变更为STAT_OUT状态,表示当前指针处于非连续的空格状态。
{
   
	//TODO:添加相关图片解释
}
此外,状态每次由STATE_OUT转为STATE_IN时,都需要记录当时STATE_IN状态的指针位置end,
在Python中,可以使用strip()方法来去除字符串首尾空格。该方法会同时去除字符串开头和结尾的空格。例如,如果有一个字符串name = " Sheep Core ",可以使用name.strip()来去除首尾空格,结果为'Sheep Core'。\[1\] 如果想要去除字符串中间的空格,可以使用replace()方法来替换空格为其他字符。例如,可以使用name.replace(" ", "")来将字符串中的空格替换为空字符,从而去除所有空格。\[1\] 另外,如果需要自定义去除字符串首尾空格的函数,可以使用遍历字符串的方式来实现。可以先正序遍历字符串去除首部空格,然后再逆序遍历字符串去除尾部空格。具体的实现代码可以参考引用\[3\]中的示例代码。\[3\] 综上所述,Python提供了多种方法来去除字符串首尾空格,包括使用strip()方法、replace()方法以及自定义函数。 #### 引用[.reference_title] - *1* [python 去掉字符串首尾空格](https://blog.csdn.net/u014651560/article/details/128410404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [python去除字符串首尾空白符的实现](https://blog.csdn.net/qq_43594913/article/details/125764014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值