删除字符串首尾空格,中间的连续空格只留一个。
作者:互联网
题目描述:编写代码完成如下功能:删除字符串首尾空格,中间的连续空格只留一个,原来字符串的顺序不变。
如:"********as****adadp***"(*表示空格)变成"as*adadp"。
思路:先删除首尾空格,若删除后字符串为空,则代表该字符串全为空格,那么返回 null,不用继续进行操作。
若不为空,然后遍历字符串,为了避免访问溢出,从第一个遍历到倒数第二个字符。
- 若该字符不是空格,直接存储
- 若该字符为空格,判断它的下一个字符是否为空格,如果不是,存储该空格。如果是,继续遍历。
遍历结束后只剩最后一个不为空格的字符直接存储。测试代码
public static String delete2(String s){
s = s.trim();//s.trim()方法的作用是去除首尾空格
if("".equals(s)){//判断删除首尾空格后字符串是否已经为空
return null;
}
StringBuilder ret = new StringBuilder();
int i = 0;
for( i = 0;i < s.length() - 1;i++){
if(s.charAt(i) != ' '){
ret.append(s.charAt(i));
}
if(s.charAt(i) == ' ' && s.charAt(i + 1) != ' '){
ret.append(s.charAt(i));
}
}
ret.append(s.charAt(i));
return ret.toString();
}
C语言:C语言中没有trim()函数,所以需要自己实现。Trim()函数的实现。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char* Trim(char *a){
char *p1, *p2;
p1 = a;
p2 = a + strlen(a) - 1;
while (p1 <= p2 && *p1 == ' '){
p1++;
}
while (p2 >= p1 && *p2 == ' '){
p2--;
}
*(++p2) = '\0';
return p1;
}
char *Delete(char s[])
{
int i = 0;
s = Trim(s);
char *str = s;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] != ' ')
{
*str++ = s[i];
}
if ((s[i] == ' ') && !(s[i + 1] == ' '))
{
*str++ = s[i];
}
}
*str = '\0';
return s;
}
int main()
{
char a[] = {" jis q iq ss "};
printf("%s", Delete(a));
system("pause");
return 0;
}
标签:char,p1,return,只留,空格,字符串,首尾,charAt 来源: https://blog.csdn.net/qq_43606352/article/details/100022265