Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Strings (http://www.informatikerboard.de/board/thread.php?threadid=202)


Geschrieben von Celtic_Princess am 29.05.2007 um 11:57:

  Strings

Man soll ein Programm schreiben, das zwei Strings vergleicht, und die dann 0 oder ungleich Null zurückgibt.
Das soll mit strcmp geschehen und zeigen, ob String kleiner, gleich oder groesser ist.

char str1 20;
char str2 20;

printf("Bitte ersten String eingeben: ");
scanf("%s", &str1);
printf("Bitte geben sie den zweiten String ein: ");
scanf("%s", &str2);

if(strcmp(str1, str2)==0)
printf(""%s %s are the same", str1, str2);

else if(strcmp(str1,str2)<0)
printf("%s less than %s", str1, str2);

else
printf("%s greater than %s", str1, str2);


Hier versteh ich nicht wie strcmp vergleicht, im Buch steht das erste unterschiedliche Zeichen der beiden Strings, und dann welches groesser ist.
Aber damit kann ich nichts anfangen.
Ich habe bei else if mal das kleiner Null umgedreht und den Text entsprechend geändert, also das bei else dann less than steht, aber das ging nicht, dann war die Ausgabe falsch.
Wie funktioniert denn diese strcmp Block?



Geschrieben von David_pb am 01.06.2007 um 17:51:

 

Die Funktion strcmp vergleicht beide C-Strings Alphabetisch. Wenn str1 kleiner als str2 ist wird -1 zurückgegeben, ist str1 größer als str2 wird 1 zurückgegeben sind beide C-Strings gleich wird 0 zurückgegeben.

Hatte mal was geschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
int string::cmp( const char* s1, const char* s2 )
{
	int c1, c2, d;

	assert( s1 != 0 && s2 != 0 );

	do
	{
		c1 = *s1++; // Naechstes Zeichen von s1
		c2 = *s2++; // Naechstes Zeichen von s2
		d  = c1 - c2; // Differenz der Zeichen

		if ( d ) // Wenn Differenz besteht sind die Strings ungleich
		{
			return ( cry_math::sign_bit_not_set( d ) << 1 ) - 1;
		}
	} while( c1 );

	return 0;
}


Forensoftware: Burning Board, entwickelt von WoltLab GmbH