2016-11-17 3 views
3

Ich versuche, eine Zeichenfolge einzufügen, indem Sie eine Teilzeichenfolge in der Zeichenfolge (Original) durch eine neue Zeichenfolge (ToInsert) ersetzen. Der Startparameter ist die Startposition der Teilzeichenfolge, die ich ersetzen möchte. Hinweis: Dies ist Teil eines größeren Programms, aber ich versuche nur, diese Funktion zum Laufen zu bringen.Zeichenfolge (Zeichen für Zeichen) in eine größere Zeichenfolge einfügen

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define ROW 5 
#define COLUMN 81 

void insertString(char original[], int start, int length, char toInsert[]){ 

char buffer[COLUMN]; 
int i = 0; 

for (i=0; i<strlen(original); ++i){ 
    if (i>=start){ 
     buffer[i] = toInsert[i]; 
    } 
    else{ 
     buffer[i] = original[i]; 
    } 
} 

buffer[strlen(buffer)-1] = '\0'; 



printf("%s\n", buffer); 



return; 
} 

int main() 
{ 
char rep[COLUMN] = "very"; 
char sub[COLUMN] = "are"; 

char buf[ROW][COLUMN] = { 
    {"How are you doing"} 


}; 
int len = strlen(sub); 
int start = 4; 

insertString(buf[0], start, len, rep); 



return 0; 
} 

Das Problem ist, es druckt nur "Wie".

Ich mag es drucken

auch „Wie sehr Sie tun“, ich habe mit strcpy versucht, aber das gibt nur Fehler/Warnungen (etwas mit Zeigern zu tun, und ich will nicht mit Zeigern befassen, weil Ich habe noch nichts über sie gelernt.)

+0

Nun, es ist schwierig, Strings ohne Zeiger zu verwenden. ;-) –

+0

aha Ich verstehe, aber gibt es Möglichkeit, dieses Problem ohne sie zu beheben? –

+0

Nein, Sie verwenden bereits Zeichenfolgen. Dies ist jedoch hier nicht wichtig. Bitte reduzieren Sie Ihr Problem, ohne Arrays von Arrays zu haben. Sie brauchen das nicht, um Ihr Problem zu beschreiben. http://stackoverflow.com/help/mcve –

Antwort

1

Ihre Funktion macht keinen großen Sinn, weil sie die ursprüngliche Zeichenkette weder vergrößern noch verkleinern, obwohl sie dies tun muss.

Und außerdem hat es Verhalten aufgrund dieser nicht definiert, wenn Aussage, denn wenn i gleich oder größer ist als start Sie den Speicher über die Zeichenfolge zugreifen können toInsert mit dem Index i.

if (i>=start){ 
    buffer[i] = toInsert[i]; 
} 

Es ist einfacher, die Funktion unter Verwendung von Standard-C-Funktionen zu schreiben.

Hier sind Sie

#include <stdio.h> 
#include <string.h> 

char * replaceString(char *s1, size_t pos, size_t n, const char *s2) 
{ 
    size_t n1 = strlen(s1); 

    if (pos < n1) 
    { 
     size_t n2 = strlen(s2); 

     if (n != n2) 
     { 

      memmove(s1 + pos + n2, s1 + pos + n, n1 - pos - n + 1); 
     } 

     memcpy(s1 + pos, s2, n2); 
    } 

    return s1; 
} 


int main(void) 
{ 
    { 
     char s1[100] = "ab1111cd"; 
     const char *s2 = "22"; 

     puts(replaceString(s1, 2, 4 , s2)); 
    } 

    { 
     char s1[100] = "ab11cd"; 
     const char *s2 = "2222"; 

     puts(replaceString(s1, 2, 2 , s2)); 
    } 

    { 
     char s1[100] = "ab11cd"; 
     const char *s2 = "22"; 

     puts(replaceString(s1, 2, 2 , s2)); 
    } 

    return 0; 
} 

Die Programmausgabe ist

ab22cd 
ab2222cd 
ab22cd 

Wenn dieses Codeblock

{ 
    char s1[100] = "How are you doing"; 
    const char *s2 = "very"; 

    puts(replaceString(s1, 4, 3 , s2)); 
} 

im demonstrativen Programm eingefügt werden Sie die Ausgabe

erhalten
How very you doing 
+0

Wie würde das mit meinem Beispiel funktionieren? –

+0

Egal, ich habe es zur Arbeit gebracht. Vielen Dank noch einmal Herr. Vlad das funktioniert, aber hoffentlich wird es in meinem ganzen Programm funktionieren –

+0

Sie Herr sind erstaunlich, es funktioniert in meinem Programm Vielen Dank –

Verwandte Themen