題目描述:編寫代碼完成如下功能:删除字元串首尾空格,中間的連續空格隻留一個,原來字元串的順序不變。
如:"********as****adadp***"(*表示空格)變成"as*adadp"。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL5VleNJTQq5keRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4YzNyUjN1EjMyIDOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
思路:先删除首尾空格,若删除後字元串為空,則代表該字元串全為空格,那麼傳回 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;
}