/* Projekt MergeString Zusammenführung (concatenate) von 2 Zeichenketten (strings). Versionen 1.0 und 2.0 / 2002.04.01 Autor: pstrainer@gmx.net */ #include #include #include #define line_maxlen 100 #define myversion 2 // valid options: {1,2} int merge_string(char*,char*,char*); // *************** Version 1 ******************** #if myversion==1 void main (void) { char src1[]="abc"; char src2[]="123"; char dst[line_maxlen]; merge_string(src1,src2,dst); printf("MergeString (%s,%s)=%s\n",src1,src2,dst); } int merge_string(char *s1,char *s2,char *d) { /* Funktion merge_string Zusammenführung (concatenate) von 2 Zeichenketten (strings). Version 1.0 / 2002.04.01 Autor: Peter Schindler, pstrainer@gmx.net Syntax: int merge_string(char*,char*,char*); ... char src1[...]; char src2[...]; char dst[...]; ... merge_string(src1,src2,dst); Length: 19 lines of code */ int i,j; char c; i=0; // index for dst j=0; // index for src1 c='$'; while (c!='\0') { c=s1[j++]; // character to test if(c!='\0') d[i++]=c; } j=0; // index for src2 c='$'; while (c!='\0') { c=s2[j++]; // character to test if(c!='\0') d[i++]=c; } d[i]='\0'; // terminate string return i-1; } // *************** Version 2 ******************** #elif myversion==2 int _sub_merge_string (int,char*,char*); void main (void) { int sl,dl; char src1[line_maxlen]; char src2[line_maxlen]; char dst[line_maxlen]; printf("Projekt MergeString\n"); sl=1; while (sl>0) { printf("\nGeben sie Text1 ein: "); gets(src1); printf("Geben sie Text2 ein: "); gets(src2); sl=strlen(src1)+strlen(src2); dl=merge_string(src1,src2,dst); printf("MergeString (%s,%s)=%s\n",src1,src2,dst); } #ifdef _DEBUG printf("\nPress any key to continue "); _getch(); #endif } int merge_string(char *s1,char *s2,char *d) { /* Funktion merge_string Zusammenführung (concatenate) von 2 Zeichenketten (strings). Version 2.0 / 2002.04.01 Autor: Peter Schindler, pstrainer@gmx.net > Die Funktion gibt die Länge des (neuen) strings dst an das aufrufende Programm zurück. > Falls ein source-string kein Ende-Zeichen enthält, so wird die Funktion nach 100 Zeichen (einstellbar) abgebrochen. > Die Größe des erzeugten string (dst) wird mit 100 Zeichen (einstellbar) begrenzt. > Optional werden Sonderzeichen <'\x20' ignoriert. Syntax: int merge_string(char*,char*,char*); ... char src1[...]; char src2[...]; char dst[...]; int dl; ... dl=merge_string(src1,src2,dst); Length: 20 lines of code */ #define skip_control_chars 1 // ignore control chars (if value>0) int i=0; // index for dst i=_sub_merge_string(0,s1,d); // merge src1 i=_sub_merge_string(i,s2,d); // merge src2 d[i]='\0'; // terminate string return i-1; } int _sub_merge_string (int i,char *s,char *d) { /* Copy string s to string d, starting at position (index) i */ int j=0; char c='$'; while (c!='\0') { c=s[j++]; // character to test // control character (option) ? if ( (!skip_control_chars) || (c>='\x20') ) { // size limits: if ( (i>=line_maxlen) || (j>line_maxlen) ) c='\0'; if(c!='\0') d[i++]=c; // copy char to dst } } return i; } // *************** Version ? ******************** #else void main (void) { printf("Makro #myversion wurde illegal definiert\n"); } #endif /* ========== eof ========== */