似乎不僅僅是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