華科大2012機試2

(1)輸入n個字符串,字符串只能是純數字或者純字母,不能事先指定n,最後將字符串倒敘輸出。

(2)將純字母的字符串按字典順序輸出,純數字的字符串按數字大小輸出。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*int partion(char**strs,char** nums,char** chars,int len){//分類函數,將字符串分類成純數字跟純字母類型,
    int i=0,indexnum=0,indexchar=0;
    for(i=0;i<len;i++){
        if((strs[i][0]>='0')&&strs[i][0]<='9'){
            indexnum++;
            nums=(char**)realloc(nums,indexnum*sizeof(char*));
            nums[indexnum-1]=(char*)malloc(strlen(strs[i])*sizeof(char));
            strcpy(nums[indexnum-1],strs[i]);
        }else{
            indexchar++;
            chars=(char**)realloc(chars,indexchar*sizeof(char*));
            chars[indexchar-1]=(char*)malloc(strlen(strs[i])*sizeof(char));
            strcpy(chars[indexchar-1],strs[i]);
        }
    }
    return indexnum;
}*/
void printonsort(char** p,int len){//將字符串按序排好並輸出
    int i=0,j;
    char *k=NULL;
    for(i=1;i<len;i++){
            k=(char*)realloc(k,strlen(p[i])*sizeof(char));
            strcpy(k,p[i]);
            j=i-1;
        while((j>=0)&&(strcmp(p[j],k)>0)){
           strcpy(p[j+1],p[j]);j--;
        }
        strcpy(p[j+1],k);
    }
    for(i=0;i<len;i++){
        printf("%s\n",p[i]);
    }
    free(k);
}


int main(void){
    char c;
    char *str=NULL;
    char **strs=NULL;
    int count=0,strnums=0,i=0;
    while(scanf("%c",&c)!=EOF){
        if(((c==' ')||(c=='\n'))&&count!=0){
            strnums++;
            strs=(char**)realloc(strs,strnums*sizeof(char*));
            strs[strnums-1]=malloc(strlen(str)*(sizeof(char)));
            strcpy(strs[strnums-1],str);
            strs[strnums-1][count]='\0';
            count=0;
        }else if((c!=' ')&&c!='\n'){
        count++;
        str=(char*)realloc(str,count*sizeof(char));
        str[count-1]=c;
        }
    }
    i=strnums-1;
    while(i>=0){
        printf("%s ",strs[i--]);
    }
    printf("\n");

    char**nums=NULL,**chars=NULL;
    int indexnum=0,indexchar=0;
    for(i=0;i<strnums;i++){
        if((strs[i][0]>='0')&&strs[i][0]<='9'){
            indexnum++;
            nums=(char**)realloc(nums,indexnum*sizeof(char*));
            nums[indexnum-1]=(char*)malloc(strlen(strs[i])*sizeof(char));
            strcpy(nums[indexnum-1],strs[i]);
        }else{
            indexchar++;
            chars=(char**)realloc(chars,indexchar*sizeof(char*));
            chars[indexchar-1]=(char*)malloc(strlen(strs[i])*sizeof(char));
            strcpy(chars[indexchar-1],strs[i]);
        }
    }
    printonsort(chars,indexchar);
    printonsort(nums,indexnum);
return 0;
}

理解:題目要求輸入n個字符串,並且在n不知情的條件下接受字符串,所以只能通過動態的數組來接受字符串。

共有兩個動態數組:char**p數組,以及p[i]數組。

第一個數組根據(c==' '||c=='\n')&&count!=0(count爲當前接受的字母或數字個數。)來動態更新,並且在更新中將count置零,方便下次接受數據。

第二個數組更新動態更新的判定比較明顯==不寫了。

提示點:本來劃分數據的時候我是攜程分類函數的方法來分類的,後來發現,傳送進去的兩個char**p指針變量在函數內完成劃分後,函數結束兩個變量依舊沒有獲得數據。這種指針數據的傳遞方法要記住--是不可行的....考點。具體方法可以看partion函數內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章