輸入不定個數字串的優化【含strlen、strcmp[string.h]】

利用陣列去把每個任務條件分開,有點像是利用陣列、指標陣列、整數計數來分配任務,很有趣,也讓敝人更清楚除了指令以外,其實最重要的就是把一件任務利用指令的功能與邏輯性的思考去實現最終的結果。

另外在這裡有使用到strlen以及strcmp兩個在string.h之下的指令。
strlen可以計算出該字元陣列實際輸入多少個字元,但不含\0。
e,g:
str[5]="BOOK";
n=strlen(str);
所以n=4;代表有4個字元(不含\0,若完整則需要+1)
strcmp可以對比來源資料是否與條件設定相同,相同為0,不同為1。
e,g:
char str[5];
scanf("%s",str);
if(strcmp(str,"BOOK")==0){
printf("same");
}else{
printf("different");
}

以下範例為在其他大師傳授知識時給予的方法與意見,並非敝人撰寫,是跟著一起敲出來的,加上自己的筆記與註解。
#include<stdio.h>
#include<string.h>
int main(){
        char raw[5000];//總字串字元範圍(這裡設定5000字元)
        char *str[100];//紀錄每個字串第一個記憶體位址(這裡設定100組)
        char input[50];//每輸入一段字元上限值(這裡每次最多50字元)
        int len=0;//用於紀錄一共輸入多少字串
        int size=0;//紀錄全部一共輸入多少字元,以及給*str取字串目前為止位置
        while(1){
                scanf("%s",input);//輸入字元
                if(strcmp(input,"END")==0){//strcmp用於比較參照值或字,相同於條件==0,不同為1
                        break;
                }
                str[len]=raw+size;//指標str[n]取址raw+size(陣列+1=陣列1),可取址每個輸入字串第一位址
                strcpy(str[len],input);//複製字元到指標str指向的raw位址
                size=size+strlen(input)+1;//strlen可計算出輸入字元長度(不含\0所以+1),且可用於取址每次輸入的第一個位址
                len++;//輸入一個字串+1,最後可以知道一共多少字串
        }
        printf("--------\n\n");
        for(int i=0;i<len;++i){
                printf("%s ",str[i]);
        }
        printf("\n(%d , %d)\n",len,size);//一共多少字串+一共多少字元
        return 0;
}

留言