• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

C++ strings vergleichen

Status
Für weitere Antworten geschlossen.
Mitglied seit
31.10.2004
Beiträge
289
Reaktionen
0
Hallo,

das folgende Programm soll ein Wort von der Konsole einlesen und prüfen, ob es ein Palindrom ist. Dummerweise gibt es immer FALSE aus, obwohl ich keinen Fehler finden kann :confused:

Code:
// palindrome erkennen

#include <iostream>
#include <string>
using namespace std;

string string_reverse(string a)
{
	string rev;
	int len = a.size();
	for(int i = 0; i < len; i++) {
		rev += a[len - i - 1];
		cout << i << ": " << a[len - i - 1] << endl;
	}
	return rev;
}
int main(int argc, char* argv[])
{
	string input;

	if(argc == 1) {
		cout << "USAGE: " << argv[0] << " <word to check>" << endl;
		return 0;
	}
	else
		input = argv[1];

	string reverse = string_reverse(input);
	cout << "reverse = '" << reverse << "'" << endl;
	cout << "input   = '" << input << "'" << endl;

	cout << ((input == reverse) ?  "TRUE" : "FALSE") << endl;
	return 0;
}

Ausgabe:
Code:
$ ./palindrom w
reverse = 'w'
input   = 'w'
FALSE
$ ./palindrom ewe
reverse = 'ewe'
input   = 'ewe'
FALSE
$ ./palindrom test
reverse = 'tset'
input   = 'test'
FALSE
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
ich kenn mich mit c nicht aus, aber in java müsste man 2 sachen machen.


1. schadet auf jeden fall in c auch nicht: String rev = ""; <- also schonmal leer initialisieren.

2. hängt davon ab, wie das in c läuft:

schleifendurchläufe:
bspstr: "abc"
len = 3

1. durchlauf: i = 0; len -i = 3; a[len] = a [3] gibts garnicht, also ref = ??? java würde ne ArrayOutOfBoundsException werfen

2. durchlauf: i = 1; len-i = 2; a[2] = c; rev = "c"

3. durchlauf: i = 2; len-i = 1; a[1] = b; rev = "cb"

4. durchlauf (garnicht nötig, ne? warum kleinerGLEICH ??? ) i = 3; len-i = 0; a[0]=a; rev = "cba"

also warum er FALSE macht weiss ich nicht, warum er dir nicht abstürzt weiss ich auch nicht, aber als Fehler seh ich das schon ;)
 
Mitglied seit
31.10.2004
Beiträge
289
Reaktionen
0
lol jetzt gehts. Scheint wirklich am Zugriff gelegen zu haben, obwohls richtig ausgegeben wurde. Kann zu, und Dank an Sholvar :top2:
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
Original geschrieben von moepehl

Code:
// palindrome erkennen

#include <iostream>
#include <string>
using namespace std;

	int len = a.size();
	for(int i = 0; i < len; i++) {
		rev += a[len - i - 1];
		cout << i << ": " << a[len - i - 1] << endl;
	}

ich würde den fehler dort suchen - was ergibt denn die ausgabe an der stelle?


LOOOL du hast meinen vorschlag reineditiert bevor ich ihn gepostet habe 8[
er gibt FALSE, weil vermutlich das nullbyte vom ende an den anfang kopiert wurde und die strings somit nich mehr gleich sind (oder vom end an den anfang - was weiß ich)
 
Status
Für weitere Antworten geschlossen.
Oben