String afdrukken

  • Onderwerp starter Onderwerp starter Roel0
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Roel0

Gebruiker
Lid geworden
8 feb 2011
Berichten
17
gegroet ,

Ik heb een prog gemaakt die 2 strings inleest en deze twee strings in 1 string kapt . Maar dan wel in alfabetische volgorde. Echter wanneer ik die laatste string afdruk op het scherm , print hij de 2 eerste strings steeds mee af:
Voorbeeld:
Input
qwert
asdfg
output
adefgqrstwasdfgqwert

hier is mijn code:
Code:
#include <stdio.h>
#include <string.h>
#define MAX 5

void meng( char str[] , char str2[] , char str3[]);
void main (void)
{
	int i;
	char str[MAX];
	char str2[MAX];
	char str3[MAX*2];

	for( i = 0; i < MAX; i++)
		scanf("%c" , &str[i]);
	scanf("%*c");
	for( i = 0; i < MAX; i++)
		scanf("%c" , &str2[i]);
	meng(str , str2 , str3);
	printf(" %s\n" , str3);
}
void meng( char str[] , char str2[] , char str3[])
{	
	int plaats = 0;
	int i, j;
	for(i=0; i < MAX; i++)
	{
		for(j=0; j<MAX; j++)
		{
			if( str[i] > str[j] && i != j )
				plaats++;
			if( str[i] > str2[j] )
				plaats++;
		}
		str3[plaats] = str[i];
		plaats = 0;
		}
	for(i=0; i < MAX; i++)
	{
		for(j=0; j<MAX; j++)
		{
			if( str2[i] >= str2[j] && i != j )
				plaats++;
			if( str2[i] >= str[j])
				plaats++;
		}
		str3[plaats] = str2[i];
		plaats = 0;
		}
}

iemand enig idee hoe dit komt? Overzie ik echt iets dom? Commentaar over de rest van de code is altijd welkom.

Vriendelijke groeten ,
Roel
 
Er zitten wel een paar kleine fouten in je code:

- als i en j niet gelijk zijn aan elkaar dan wordt plaats dus twee keer verhoogd, wat als gevolg heeft dat je geheugen aanspreekt dat buiten het bereik van de array (str3) valt. (anders zou str3 ook nooit een lengte van 20 kunnen hebben zoals in je voorbeeld)
- als je de twee strings achter elkaar in str3 wilt stoppen, waarom stel je de positie/plaats dan weer op 0 in waardoor er weer opnieuw wordt begonnen?

Een oplossing die wel werkt is bijvoorbeeld:

[cpp]
void Merge(char *dest, const char *src1, const char *src2)
{
strcpy(dest, src1);
strcpy(&dest[strlen(dest)], src2);

int i, done, len = strlen(dest);

do
{
done = 1;
for (i = len-1; i; i--)
{
if (dest < dest[i-1])
{
char c = dest;
dest = dest[i-1];
dest[i-1] = c;
done = 0;
}
}
}
while (done != 1);
}
[/cpp]
 
Wat ook een beetje eng is, is dat str en str2 een lengte hebben van 5 en dat je een tekst van 5 letters erin plaatst. C-strings moeten nul-terminated zijn, dat wil zeggen dat het laatste teken een '\0' moet zijn. Voor dit teken moet ook ruimte zijn en in dit geval is dat niet het geval. Je moet dus of MAX+1 gebruiken of een tekst van 4 letters gebruiken.
 
De fout zat hem in het \0 gebied. beide bedankt voor jullie hulp :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan