"Übung 1-23. Schreiben Sie ein Programm, um alle Kommentare aus einem C-Programm zu entfernen. Vergessen Sie nicht, in Anführungszeichen und Zeichen Konstanten richtig zu behandeln. C Kommentare verschachteln nicht." & K R pg.34K & R Exe. 1-23: Einige Komplikationen
Grundsätzlich habe ich zwei Fragen:
1) Ich bin völlig neue Codierung und ich wollte wissen, ob ich zumindest bin das Problem, den richtigen Weg zu denken.
2) Der Code wurde erstellt, um //
bis \n
oder /*
bis */
zu ignorieren. Aber mit dem /*
Kommentar bleibt immer eine /
.
Input:abc/*comment*/123
Output:abc/123
Input: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;
}
Danke.
Haben Sie einen Debugger die Ausführung des Programms zu verfolgen verwendet? Oder sogar grundlegende Printf Debugs? Lernen und Erfahrung im effektiven Debuggen ist die Mühe wert. – kaylum
Muss ich einen Debugger installieren oder habe ich ihn bereits?Ich kodiere in IOs El Capitan mit TextWrangler. –