Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » String Deklaration funktioniert nicht??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.12.2005, 19:17 Uhr
Blaufusstoelpel



Hallo,

habe folgendes Problem. Dieses Programm soll Palindrome testen. Tut es mit fest eingegebenen Wörtern auch. Jetzt wollte ich aber ein Worteingabe hinzufügen, und bekomme folgende Fehler meldung: "pali" undeclared, first use in this function.

Wenn ich pali aber global setze, funktioniert es auch nicht...


C++:
#include <stdio.h>
#include <ctype.h>
#include <iostream>
#include <string>
#include <cstdlib>



bool palindrom()
{
int i,n;
char s[40] = pali;
//char s[40] = "rentner";
n = strlen(s);
tolower(s[0]);
for(i < n ; i=0 ; i=i+1)
    {
    if(s[i] == s[n-1])
     n=n-1;  
    else
       return false;
return true;
}
}

using namespace std;

main(int argc, char *argv[])
{
string pali;
cout << "Bitte geben sie das zu untersuchende Wort ein:" << endl;
cin >> pali;
int stop;
if (palindrom() == true)
cout <<"Das Wort ist ein Palindrom" << endl;
else
cout << "Das Wort ist kein Palindrom" << endl;

system("PAUSE");
return EXIT_SUCCESS;
}



Habt ihr ne idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2005, 19:27 Uhr
mischa
Fragender


also so funktionierts bei mir


C++:
#include <iostream>
using namespace std;

bool palindrom(char p[])
{
    
int i,n;
char s[40];
strcpy(s,p);
//char s[40] = "rentner";
n = strlen(s);
tolower(s[0]);
for(i < n ; i=0 ; i=i+1)
    {
    if(s[i] == s[n-1])
     n=n-1;  
    else
       return false;
return true;
}
}



int main()
{
char pali[40];
cout << "Bitte geben sie das zu untersuchende Wort ein:" << endl;
cin >> pali;
int stop;
if (palindrom(pali) == true)
cout <<"Das Wort ist ein Palindrom" << endl;
else
cout << "Das Wort ist kein Palindrom" << endl;

cin.get();
return 0;
}




--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.

Dieser Post wurde am 08.12.2005 um 19:30 Uhr von mischa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2005, 20:19 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <algorithm>
#include <iostream>
#include <string>

bool palindrom(std::string const &s) {
  return std::equal(s.begin(), s.begin() + s.size() / 2, s.rbegin());
}

int main() {
  std::string s;

  std::cout << "Wort eingeben: ";
  std::getline(std::cin, s);

  std::cout << "Das Wort ist " << (palindrom(s) ? "ein" : "kein") << " Palindrom" << std::endl;
}


An Mischas Code würde ich aussetzen, dass die Eingabe nicht sicher ist (buffer overflow). Das ist in diesem speziellen Fall nicht besonders kritisch, aber solche Angewohnheiten sollte man sich am besten garnicht erst zulegen - wofür gibts denn std::string?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.12.2005 um 20:31 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2005, 20:52 Uhr
Blaufusstoelpel



Vielen Dank. Jetzt ist nur noch das Problem, das obwohl der Code stimmen sollte, ich für rentner und andere Palindrome trotzdem ausgegeben krieg, dass es kein Palindrom ist. Auch mit Mischas Prgogramm...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.12.2005, 21:00 Uhr
0xdeadbeef
Gott
(Operator)


Die Zeile

C++:
for(i < n ; i=0 ; i=i+1)


muss so aussehen:

C++:
for(i = 0 ; i < n ; i = i + 1)


bzw. (so würd ichs machen)

C++:
for(i = 0; i < n; ++i)


...aber das ist funktional ja äquivalent. Allerdings müsste dein Programm eigentlich immer angeben, dass es sich um ein Palindrom handelt, da die Schleife direkt abbricht und palindrom dementsprechend immer true zurückgibt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.12.2005 um 21:02 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.12.2005, 10:50 Uhr
Gap




Zitat von 0xdeadbeef:

bzw. (so würd ichs machen)

C++:
for(i = 0; i < n; ++i)





Wenn mir schon dabei sind:

Warum nicht so:


C++:
for(int i = 0; i < n; ++i)



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.12.2005, 12:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Der Grund dürfte einfach sein. In deinem Fall steht das i nach der Schleife nicht mehr zur Verfügung und in Beefys fall schon. Die Frage ist was man will. In Sachen Compilerfreundlichkeit ist beefys Variante auch deiner vorzuziehen da der VC 6++ z.B. hier den Standard nicht so ganz umsetzt und i aus dem Scope der Schleife zieht was unschöne effekte haben kann...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.12.2005, 17:15 Uhr
0xdeadbeef
Gott
(Operator)


Naja, in diesem Fall wird das i nach der Schleife nicht mehr gebraucht, von daher macht es schon Sinn, ihren Gültigkeitsbereich auf die Schleife zu beschränken. Was den VC++ 6.0 angeht, ein C++-Compiler, der kein C++ kann, ist in meinen Augen ziemlich wertlos. Upgrade.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: