問題描述:
在給定字符串中找出單詞( “單詞”由大寫字母和小寫字母字符構成,其他非字母字符視爲單詞的間隔,如空格、問號、數字等等;另外單個字母不算單詞);找到單詞後,按照長度進行降序排序,(排序時如果長度相同,則按出現的順序進行排列),然後輸出到一個新的字符串中;如果某個單詞重複出現多次,則只輸出一次;如果整個輸入的字符串中沒有找到單詞,請輸出空串。輸出的單詞之間使用一個“空格”隔開,最後一個單詞後不加空格。
要求實現函數:
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';
}