天天看點

删除字元串首尾空格,中間的連續空格隻留一個。

題目描述:編寫代碼完成如下功能:删除字元串首尾空格,中間的連續空格隻留一個,原來字元串的順序不變。

如:"********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;
}
           

繼續閱讀