看板 C_and_CPP 關於我們 聯絡資訊
似乎不僅僅是length用錯的問題... 我改了一個版本您可以比較看看 #include<iostream.h> #include<string.h> void finalstate(char*,char*,char*); int main() { char data[20]; char temp[20]; char rule[20]; printf("type data:"); scanf("%s",data); printf("selected data:"); //輸入一連串的,例如第一次3,第二次是5,則輸入35 scanf("%s",rule); //再讓程式一次跑完顯示最後結果 finalstate(data,rule,temp); system("pause"); return 0; } void finalstate(char* data,char* rule,char* temp){ int length=strlen(rule); for(int i=0,j=0,k=0 ; i<=length-1 ; i++){ while(data[j]!=rule[i]){ temp[k]=data[j]; k++; j++; } temp[k]=data[j]; j=0; while(k>=0){ data[j]=temp[k]; j++; k--; } } printf("%s\n",data); } ※ 引述《yauhh (喲)》之銘言: : ※ 引述《conan77420 (人生就是不停的戰鬥)》之銘言: : : void finalstate(char data[],char rule[],char temp[]) : : {int c=0; : : int length=strlen(data); : : for(int i=0,j=0,k=0 ; i<length-1 ; i++) : : { : : while(data[j]!=rule[i]) //似乎是這個while有問題 : : { temp[k++]=data[j++];} : : temp[k++]=data[j++]; : j,k走到某個預期位置. : : k=0; : k回頭從頭開始. k < or = j : : while(j>=0) : : { data[j--]=temp[k++];} : k往j移動,同時j往k移動. (備份資料倒著貼回去?) : 這樣的動作不是你要的. 你要的是像: : k = 1; : while (k <= j) : { : data[k] = temp[k]; : k++; : } : data[0] = rule[i]; : : k=0;j=0 ; : : } : : printf("%s",data); : : } : : 我的執行結果會有問題,不是出現亂碼就是程式跑一下就將視窗關閉 : : 目前debug覺得應該是第一個while有問題 : : 請問該如何修改? : : 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.66.19.129