2016-04-30 5 views
-3

Ich brauche Hilfe Strings in C unter Verwendung von Rekursion verkettenConcatenate Strings rekursiv in C

Ich habe 2 Strings in Eingang, src und dest, und ich brauche rekursiv src-verketten dest, und speichern Sie die verkettete Zeichenfolge in dest.

z.B. Wenn src="house" und dest="clock", sollte die Ausgabe "chlooucske" sein.

EDIT: Das ist mein Code:

char* str_concatenate(char dest[], char src[], int index){ 
    char temp[256]; // temporaty variable 
    temp[index]=src[index]; //should copy each letter from src to temp 
    temp[index+1]=dest[index]; //should copy each letter from dest to temp 
    dest[index]=temp[index]; //should store the concatenated string into dest 
    if (src[index]=='\0'){ //base case 
     return dest; 
    } 
    else 
     return str_concatenate(dest,src,index+1); 
} 

int main(){ //test 
     char dest[]="house"; 
     char src[]="clock"; 

     char* ris=str_concatenate(dest,src,0); 

     printf("dest= %s\n", ris); //should print "chlooucske" 
    return 0; 
    } 

jedoch kopiert das gesamte Wort von src-dest und druckt sie, spielt es keine Buchstaben verketten.

+2

'dest' zeigt auf ein String-Literal. String-Literale können nicht geändert werden. Sie müssen einen beschreibbaren Puffer reservieren. Zum Beispiel: 'char dest [MAX_LEN] =" home ";' – kaylum

+2

Wie erhoffen Sie sich, dass diese Funktion * jemals * nur einen 'NULL'-Zeiger zurückgibt? Sie wissen, dass Sie 'NULL' nicht an' printf() 'übergeben können, richtig? – EOF

+1

@ marco2012, heute scheint sich jeder mit dir zu ärgern. Sie stimmen Sie ab und bieten Ihnen alles außer konstruktive Hilfe. Es sieht so aus, als ob dein Code zwei Strings verschachteln möchte? Ich sehe keine Verkettung. Sie haben mehrere Probleme. Eine besteht darin, dass Sie bei jeder rekursiven Eingabe Ihrer Funktion ein neues temporäres Array zuweisen. Ein anderer ist, dass Sie einen Null-Zeiger in Ihrem Basisfall zurückgeben, wenn Sie einen Null-Terminator bei src [index] finden. Ich schlage vor, Sie sagen uns, was Ihr gewünschtes Ergebnis ist und andere Leute werden Ihnen helfen, dorthin zu gelangen. – nicomp

Antwort

2

Der Zielzeiger zeigt auf eine Zeichenfolgenkonstante. Sie versuchen, es zu ändern, und Ihr Programm stürzt ab. Sie können ein Array verwenden und es als Zielzeichenfolge initialisieren.

Dies können Sie sich ansehen. Dies erklärt Ihr Problem. What is the difference between char s[] and char *s?