H面试程序3:去除字符串中多余的空格

本文介绍了一个简单的C语言程序,该程序能够移除字符串中多余的空格,保持单词间的单个空格间隔,并确保字符串首尾没有空格。通过一个具体的实现示例,展示了如何逐字符检查并调整输入字符串。

 

比如“_ _I_ _ _Lu_ _ _  _you_ _ _ _ _ _”变成“I_ Lu_you”

 

 

 

#include<stdio.h>
#include<assert.h>
//50min
void RemoveExtraSpace(char* str)
{
   assert(str);
   int flag = 1; //之前已经遇到空格
   int newp = 0;
   int i = 0;

   while(str[i] !='\0')
   {
  
	   if(flag &&str[ i] == ' ')//之前已经遇到空格,且现在又遇到空格
	   {
		   i++;
	   }
	   else if(flag &&str[i] != ' ')//之前已经遇到空格,现在没遇到空格
	   {
		   str[newp++] = str[i++];
		   flag = 0;
		   
	   }
	   else if(flag == 0 &&str[ i] == ' ')//之前没遇到空格,现在遇到空格
	   {
		   
		   str[newp++] = str[i++];
		   flag = 1;
	   }
       else //之前没遇到空格,现在没遇到空格
	   {
           str[newp++] = str[i++];
		   flag = 0;
	   }
   }
   if(str[newp-1] = ' ')   //处理结尾处多余的空格
    str[newp - 1] = '\0';
   else
    str[newp] = '\0';
}


int main()
{
	char a[] = " I  LU  YOU        ";
    RemoveExtraSpace( a );
    return 0;
}


 

 

 

 

### 回答1: 题目:去除字符串中的空格并分解单词。 解答:可以使用字符串的 replace 和 split 方法来实现。先将字符串中的空格替换为空字符串,然后再通过 split 方法将单词拆分出来,得到一个单词列表。 ### 回答2: 对于去除字符串中的空格并分解单词这个问题,我们可以采用两种常用方法来解决。 一、使用split函数 我们可以使用字符串的split函数将字符串分割成单词,并去除单词之间的空格。split函数可以按照指定字符或字符串将原字符串分割成子字符串,并将子字符串存储在一个列表中。在这个问题中,我们可以使用空格作为分割符。 具体代码实现如下: ``` def split_words(s): words = s.split(&#39; &#39;) # 使用空格分割 return words ``` 上述函数会将输入的字符串s分割成单词,并存储在words列表中。如果我们想要去除单词之间的空格,只需要在分割时将分隔符改为多个连续空格即可。代码实现如下: ``` def remove_spaces(s): words = s.split(&#39; &#39;) # 连续两个空格作为分隔符 return words ``` 二、使用正则表达式 正则表达式是一种用于匹配字符串的强大工具,我们可以使用正则表达式来匹配并替换字符串中的空格。具体代码实现如下: ``` import re def remove_spaces_regex(s): result = re.sub(r&#39;\s+&#39;, &#39; &#39;, s) # 匹配连续一个及以上的空格 words = result.split(&#39; &#39;) return words ``` 上述代码使用re模块的sub函数,匹配连续一个及以上的空格,并将其替换成单个空格。然后使用split函数将字符串分割成单词,并存储在words列表中。 总结 本文介绍了两种常用的方法来解决“去除字符串中的空格并分解单词”的问题。第一种方法使用字符串的split函数进行分割,第二种方法使用正则表达式进行匹配和替换。在实际应用中,我们可以根据具体情况来选择不同的方法。 ### 回答3: 为了去除字符串中的空格并分解单词,我们需要使用一些字符串操作的方法和技巧。以下是一些步骤和建议供参考: 1. 去除空格:使用trim()方法可以去掉字符串两端的空格,使字符串更加整洁。使用replace()方法可以将字符串中所有的空格替换为空字符。 2. 分解单词:通过使用split()方法可以将字符串按照指定的字符或字符串进行切分,得到一个字符串数组。常用的分隔符有空格、逗号、分号、冒号等。在此题中,根据需求,我们可以使用空格作为分隔符把单词拆分出来。 3. 去除无用符号:在分解单词的过程中会出现一些符号,例如标点符号和特殊符号等,如果不需要这些符号,可以使用正则表达式或者判断函数isLetter()方法判断分隔出来的每个字符串是否是字母,只保留字母类型的字符串,得到剩下的单词。 4. 存储单词:将剩下的单词存储到数组、集合或者映射等数据结构中,以便于后续的使用。可以使用ArrayList或HashMap等数据结构存储单词。 下面是具体的代码实现: ``` import java.util.ArrayList; public class Main { public static void main(String[] args) { String str = " This is a test! This is only a test. "; str = str.trim().replaceAll("\\s+", " "); ArrayList<String> list = new ArrayList<>(); for (String word : str.split(" ")) { if (word.matches("[a-zA-Z]+")) { list.add(word.toLowerCase()); } } System.out.println(list); } } ``` 以上是一种Java语言的实现方式,首先使用trim()方法去除两端的空格,使用replaceAll()方法将多个空格替换为一个空格;然后使用split()方法按照空格字符串拆分成单词组成的字符串数组,利用正则表达式过滤掉所有非字母类型的字符串,最后将符合条件的字符串存储到ArrayList中,并统一转换成小写字母形式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值