1. 程式人生 > >面試100題系列之10刪除字串中多餘的空格

面試100題系列之10刪除字串中多餘的空格

題目描述:(微軟的一道筆試題)
1、無連續相鄰的兩個空格
2、字串開頭和結尾無空格
3、新的一行開頭和結尾無空格
要得滿分,必須滿足一下兩個條件
A、不能增加新的記憶體空間
B、只能迴圈字串一次
C、不準用庫函式
參考程式碼:

#include<stdio.h>
void main()
{
	char str[10000];
	int flag;//用來標記,空格標記為0,新行標記為1,其餘的標記為2
	int i,j;

	while(gets(str) != NULL)
	{
		flag = 1;
		i = 0;
		j = 0;
		while(str[j] != '\0')
		{
			while(str[j] == ' ')//過濾掉了所有空格
			{
				++j;
				if(flag == 2)
				{
					flag = 0;
				}
			}
			if(str[j] == '\0')
			{
				break;
			}
			if(str[j] == '\n')//剩下的不是換行符就是其他的
			{
				str[i++] = str[j++];
				flag = 1;
			}
			else
			{
				if(flag == 0)
				{
					str[i++] = ' ';
				}
				str[i++] = str[j++];
				flag = 2;
			}
		}//end while(str[j] != '\0')
		str[i] = '\0';
		printf("%d\n",i);
		puts(str);
	}//end while input
}

 PS:一點小問題:
這裡用gets輸入是以換行符讀進來的,如果用檔案的方式,也只是一行一行的讀,所以怎麼將換行符輸入到字串中的問題還沒有得到解決,也希望有大牛路過,留言幫我解決一下。