/*
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 ========== */

    Source: geocities.com/pstrainer/entwicklung/c/aufgaben

               ( geocities.com/pstrainer/entwicklung/c)                   ( geocities.com/pstrainer/entwicklung)                   ( geocities.com/pstrainer)