"演習1-23。Cプログラムからすべてのコメントを削除するプログラムを作成する 引用符で囲まれた文字列と文字定数 を正しく処理することを忘れないでください。K&R Exe。 1-23:いくつかの合併症
1)私は完全に新しいコーディングだと私は、私は、少なくとも問題に正しい方法を考えているかどうかを知りたいと思った:K & Rのpg.34
は基本的に、私は2つの質問があります。
2)//
を\n
または/*
から*/
まで無視するようにコードが構築されています。しかし、白い/*
コメントは常に1つを残す/
。
入力:abc/*comment*/123
出力:abc/123
入力:abc/*123
OutpのUT:abc/
#include <stdio.h>
char s[1000]; //Principal array
int countS; //Number of char in array
int deletSingleLineComments(void);
int deletMultiLineComments(void);
int main(void){
int c;
while((c=getchar())!=EOF){
s[countS]=c;
++countS;
}
deletMultiLineComments(); //Function 1
deletSingleLineComments(); //Function 2
printf("\ns[]=\n%s\n\ncountS[]=%d\n",s,countS);
}
//Functions 1
int deletMultiLineComments(void){
char t[1000];
int i=0;
int inComment=0;
int diff=0;
int a,b,c;
while(i<=countS){
t[i]=s[i];
++i;
}
i=0;
while(i<=countS){
if(t[i]=='/' && t[i+1]=='*'){
inComment=1;
}
if(inComment==1){
++diff; //to equilibrate the number
}
if(inComment==0){
s[i-diff]=t[i];
}
if(t[i]=='*' && t[i+1]=='/'){
inComment=0;
}
++i;
}
s[i-diff+1]='\0';
countS=i-diff;
printf("\nt[]=\n%s\n",t);
}
//Function 2
int deletSingleLineComments(void){
int i=0;
char t[1000];
int inComment=0;
int diff=0;
while(i<=countS){
t[i]=s[i];
++i;
}
i=0;
while(i<=countS){
if(t[i] == '/' && t[i+1] == '/'){
inComment=1;
}
if(t[i]=='\n'){
inComment=0;
}
if(inComment==1){
++diff;
}
if(inComment==0){
s[i-diff]=t[i];
}
s[i-diff+1]='\0';
++i;
}
countS=i-diff;
}
ありがとうございました。
は、あなたのプログラムの実行をトレースするためにデバッガを使用することがありますか?あるいは基本的なprintfデバッグさえ?効果的なデバッグの経験を積み重ねることは、その努力の価値があります。 – kaylum
デバッガをインストールする必要がありますか、それとも既に持っていますか?私はIOのエルキャピタンでTextWranglerでコーディングしています。 –