華爲軟件類上機測試題

字符串處理轉換
問題描述:    
在給定字符串中找出單詞( “單詞”由大寫字母和小寫字母字符構成,其他非字母字符視爲單詞的間隔,如空格、問號、數字等等;另外單個字母不算單詞);找到單詞後,按照長度進行降序排序,(排序時如果長度相同,則按出現的順序進行排列),然後輸出到一個新的字符串中;如果某個單詞重複出現多次,則只輸出一次;如果整個輸入的字符串中沒有找到單詞,請輸出空串。輸出的單詞之間使用一個“空格”隔開,最後一個單詞後不加空格。
要求實現函數:
void my_word(charinput[], char output[])
【輸入】  char input[], 輸入的字符串
【輸出】  char output[],輸出的字符串
【返回】 無
示例
輸入:charinput[]="some local buses, some1234123drivers" ,
輸出:charoutput[]="drivers local buses some"
輸入:charinput[]="%A^123 t 3453i*()" ,

輸出:charoutput[]=""

實現代碼如下:

void convert(char input[],char output[])
{
	if(input==NULL||output==NULL)
		return;

	char *out=output;
	int len=strlen(input);//輸入字符數組的長度
	char *temp[10];
	for(int j=0;j<10;j++)
		temp[j]=(char*)malloc(sizeof(char)*10);
	char *word[10];
	for(int j=0;j<10;j++)
		word[j]=temp[j];
	int i=0;
	int flag=0;
	int word_index=0;
	while(*(input+i)!='\0')
		{
			if((*(input+i) >= 'a' && *(input+i) <= 'z') || (*(input+i) >= 'A' && *(input+i) <= 'Z'))
				{
					*word[word_index]++=*(input+i);
					flag=1;
				}
			else if(flag==1)
				{
					*word[word_index]='\0';
					word_index++;//另外一個單詞
					flag=0;
				}
			i++;	
		}
	*word[word_index]='\0';
	char *tempp;
	for(int j=0;j<word_index;j++)
		for(i=0;i<word_index-j;i++)
		{
			if(strlen(temp[i])>1)//單詞長度>1
				{
					if(strlen(temp[i])<strlen(temp[i+1]))
					{
						tempp=temp[i];
						temp[i]=temp[i+1];
						temp[i+1]=tempp;
					}
				}
		}
	
		for(i=0;i<word_index+1;i++){
			if(strcmp(temp[i],temp[i+1])&&strlen(temp[i])>1)
			{
			for(int j=0;j<strlen(temp[i]);j++)
				*out++=*(temp[i]+j);
				*out++=0x20;
				}
		}
	*out='\0';
}


發佈了19 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章