2016-04-14 5 views
-1

Ich habe gerade angefangen zu lernen c. Ich mache eine Übung und die Frage ist wie folgt.Einfügen einer Teilzeichenkette in eine andere Zeichenkette in c

Schreiben Sie eine Funktion namens insertString, um eine Zeichenfolge in eine andere Zeichenfolge einzufügen.Die Argumente für die Funktion sollten aus der Quellzeichenfolge, der einzufügenden Zeichenfolge und der Position in der Quellenzeichenfolge bestehen, in die die Zeichenfolge eingefügt werden soll . Der Aufruf insertString (text, "per", 10); mit dem ursprünglich definierten Text "the wrong son" führt dazu, dass die Zeichenkette "per" in den Text eingefügt wird, beginnend mit text[10]. Daher wird die Zeichenkette "the wrong person" nach der Rückgabe der Funktion im Textarray gespeichert.

#include<stdio.h> 
int insertString(char[],char[],int); 
int stringLength(char[]); 
int main() 
{ 
    char text[]="the wrong son"; 
    int result=insertString(text,"per",10); 
    if(result!=-1) 
    printf("string 1 is : %s \n",text); 
    else 
    printf("Not possible\n"); 
    return 0; 
} 
int insertString(char a[],char b[],int pos) 
{ 
    int i=0,j=0; 
    int lengthA=stringLength(a); 
    int lengthB=stringLength(b); 
    if(pos>lengthA) 
    return -1; 

    for(i=lengthA;i>=pos;i--) 
     a[i+lengthB]=a[i]; 

    for (i = 0; i < lengthB; ++i) 
     a[i + pos] = b[i]; 

    return 1; 
} 
int stringLength(char x[]) 
{ 
    int length=0; 
    while(x[length]!='\0') 
    length++; 
    return length; 
} 

ich habe dies getan und es funktioniert auch. aber ich erhalte eine Nachricht . Als ich darauf schaute, habe ich gelernt, dass es ein Fehler ist, weil ich in die Erinnerung schreibe, die ich nicht besitze. Da ich Zeichenfelder mit variabler Länge verwendet habe, wo auch immer die null character ist, zeigt das Ende des Arrays und ich versuche, es durch Einfügen einer Zeichenfolge zu erweitern, das ist mein Verständnis. bin ich soweit richtig?

Ich verschiebe auch die null character. Ich weiß nicht, ob es richtig oder falsch ist.

also gibt es eine Möglichkeit, um diesen Fehler zu umgehen? Auch, Ich kenne Zeiger noch nicht und sie sind im nächsten Kapitel des Lehrbuchs.

Jede Hilfe in diesem würde sehr geschätzt werden.

+1

Sie verwenden nicht "variable length character arrays". Sie müssen entweder genügend Platz für Ihr Endergebnis im Voraus reservieren, oder Sie müssen zugewiesenen Speicher verwenden und möglicherweise neu zuweisen. Suchen Sie nach Verweisen auf 'malloc()' und 'realloc()'; – Logicrat

+0

"Ich habe Zeichenfelder mit variabler Länge verwendet" wo? 'char a []' im Funktionskopf ist kein Array variabler Länge. –

+0

oh ist es? @Logicrat. In dem Lehrbuch ist angegeben, dass die Zeichenarrays, die mit einem "Nullzeichen" enden, Zeichenfolgen variabler Länge – yash

Antwort

1

Ein Array variabler Länge ist ein very specific C construct, das nichts mit dem zu tun hat, was Ihr Lehrbuch "Arrays variabler Länge" nennt. Wenn ich du wäre, würde ich diesem Lehrbuch nicht vertrauen, wenn es heißt, 1 + 1 = 2. So viel dazu.

Ein Zeichenarray, das mit einem Nullzeichen endet, wird String von so ziemlich jedem, überall genannt.

char text[]="the wrong son"; 

Ihr Lehrbuch führte Sie zu glauben, dass text so viele Zeichen halten, wie Sie benötigen. Leider gibt es keine solche Sache in C. In der Tat text wird genau so viele Zeichen wie es in seinem Initialisierer, plus 1 für den Null-Terminator halten, so dass Sie nichts darin einfügen können.

Damit Ihr Programm zu arbeiten, müssen Sie explizit für text als resultierenden String so viele Zeichen zuzuordnen enthalten.

So wie es 14 Zeichen in "falschen Sohn" (einschließlich der Terminator) und drei Zeichen "pro" (ohne den Terminator) sind, müssen Sie 17 Zeichen insgesamt:

char text[17]="the wrong son"; 

Sie kann auch Ihre Berechnungen überprüfen:

int result=insertString(text, "per", 10, sizeof(text)); 
... 
int insertString(char a[], char b[], int pos, int capacity) 
{ 
    ... 
    if (lengthA + lengthB + 1 < capacity) 
    return -1; 
    ... 
+0

vielen Dank @N.m. Bis jetzt bin ich in einer falschen Vorstellung. Das hat mir jetzt die Dinge aufgeräumt. – yash

Verwandte Themen