Zum Inhalt springen

Char mit Char* vergleichen


Talinger

Empfohlene Beiträge

Moin leute,

Ich hab das problem, dass ich in einer while bedingung einen Char mit einem leerzeichen vergleichen will bzw eigentlich will ich das es nicht gleich ist..

BSP:

String helper="abcdefg";

while (helper[1]!=" ")

{

flag=flag+1;

}

Die Fehlermeldung lautet Konvertierung von Char nach Char* nicht möglich.

Kann mir einer von euch helfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin leute,

Ich hab das problem, dass ich in einer while bedingung einen Char mit einem leerzeichen vergleichen will bzw eigentlich will ich das es nicht gleich ist..

BSP:

String helper="abcdefg";

while (helper[1]!=" ")

{

flag=flag+1;

}

Die Fehlermeldung lautet Konvertierung von Char nach Char* nicht möglich.

Kann mir einer von euch helfen?

Ein einzelner Charakter wird durch einfache Hochkommatas ' eingefasst, Strings landen in doppelten ". Wahrscheinlich liegt darin schon dein Problem.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das finde ich aber unnötig kompliziert. Wenn diese Stringklasse den Arrayoperator überlädt, warum ihn dann nicht benutzen?

Hmm da muss ich zugeben habe ich so noch nie verwendet. Aber da

const char& operator[] ( size_t pos ) const;

      char& operator[] ( size_t pos );

kann man natürlich auch den Arrayoperator nehmen. Man lernt doch nie aus :).

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Monate später...

Hallo, bin ziemlich neu auf diesen Gebiet und hab da ne Frage.

Ich möchte einen eingegeben Text auslesen und in einer if anweisung vergleichen,

Beispielsweise so:

#include <conio.h> 

#include <stdio.h> 

#include <iostream.h> 

#include <cmath.h> 

#include <stdlib.h> 

using namespace std; 



void main(void) 

{ 

  char *text; 

  printf("Geben Sie bitte beispielsweise 'hi' ein: "); 


  scanf("%c",&text); 


  if(text=="hi") 

  { 

  printf("Hallo, habe dich verstanden"); 

  } 

  else 

  { 

  printf("Ich verstehe diesen Ausdruck nicht: %c",text); 

  } 


  getch(); 

}

ODER SO:
#include <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <cmath.h>

#include <stdlib.h>

using namespace std;



int main()


{


  char *text;


  char buffer[256];




  printf("Geben Sie 'hi' ein: ");


  text = fgets(buffer, 256, stdin);



  if(text == "hi")

  {


    printf("Hallo, ich konnte Sie verstehen ");


  }

  else

  {

  printf("Ich habe Sie nicht verstanden");

  }


  getch();

  return 0;


}

komm leider irgendwie nicht weiter , habt ihr mir einen tip?

Link zu diesem Kommentar
Auf anderen Seiten teilen

sagte doch ich bin neu, habe erst in der schule angefangen C zu lernen und dafür das ich mich erst seid 2 wochen mit C beschäftige ist es doch schon mal was^^ .
Ich weiß nicht, womit du dich in diesen 2 Wochen genau beschäftigt hast, aber es scheint mir eher veraltetes C++ gewesen zu sein.

  • <iostream.h> ist ein veralteter C++-Header, weg damit.
  • <cmath.h> gibt's gar nicht, weg damit.
  • Namespaces gibt's in C auch nicht.
  • <stdlib.h> brauchst du nicht, weg damit.
  • Es muss int main heißen, nicht void main.
  • Zeichenketten muss man in char-Arrays ablegen. Du hast da nur einen Zeiger, der nirgendwohin zeigt.
  • Zeichenketten liest man mit %s ein, nicht %c
  • Strings vergleicht man mit strcmp, nicht mit ==.

Link zu diesem Kommentar
Auf anderen Seiten teilen

oh vielen dank!:)

wusste nicht das ich strings nicht mit == vergleichen kann.

kannst du mir ein beispiel geben wie ich das mit "strcmp" machen kann?

also quasi ...if ( text == "blub" )... , wie das mit strcmp aussehen muss.

Danke nochmals

ok ich glaube ich habe jetzt richtig angestzt :)

#include <conio.h> 

#include <stdio.h> 

#include <iostream.h>


void main(void)

{ 

char hi[] = "hi";

char input[100];


cin>>input;


if(strcmp(hi, input) == 0) {

	printf("Hallo wie gehts?");

        getch();

   }

else

   {

        printf("Ich verstehe dich nicht");

        getch();

   }

}

das funkzt jetzt^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

das funkzt jetzt^^

Das funktioniert nie im Leben.

Wenn es doch funktioniert, dann nur, weil du den Code als C++ compilierst. C ist das nicht.

Du solltest dich entscheiden, ob du C oder C++ lernen willst. Dieser üble Mischmasch bringt dich nicht weiter. Dein Code ist kein gültiges C, und ziemlich hässliches C++.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja ich kanns leider noch nicht so richtig unterscheiden was c was c++ ist, aber es funktioniert :P

Als C funktioniert dein Code nicht. Als C++ nur, weil dein Compiler veraltet ist.

ausserdem sagt man doch das c code problemlos im c++ code verwendet werden kann, also versteh ich nicht worin das problem liegt.
Wer ist denn "man"? Das ist nämlich Blödsinn. Es gibt jede Menge Sprachkonstrukte, die gültiges C, aber ungültiges C++ sind. C ist keine "Untermenge" von C++.

Wenn du C lernen willst, solltest du keine Elemente aus C++ benutzen. Wenn du C++ lernen willst, solltest du nicht so programmieren, als ob du C benutzt. Die Sprachen mögen verwandt sein, aber die Art und Weise, wie man sie benutzt, kann sich stark unterscheiden.

Dein Programm würde in C so aussehen:

#include <stdio.h> 
#include <string.h>

int main(void)
{
char hi[] = "hi";
char input[100];

scanf("%s",input);

if(strcmp(hi, input) == 0) {
printf("Hallo wie gehts?");
}
else {
printf("Ich verstehe dich nicht");
}
}[/code] Und in C++ so:
[code]#include <iostream>
#include <string>

int main()
{
using namespace std;

string hi("hi");
string input;

cin >> input;

if(hi == input) {
cout << "Hallo wie gehts?";
}
else {
cout << "Ich verstehe dich nicht";
}
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok und was hälst du jetzt davon?^^

( man = Unterschied zwischen C und C++ | aus Forum Programmierung allgemein | wer-weiss-was )

Probiers mal aus wenn man das hier weiter ausarbeitet kann man mit sich selbst chatten hahaha..

Du kannst in die Konsole: "hi", "wie gehts", "auch gut" und "ausruhen" eingeben und sie wird dir antworten.

Probiers mal aus


#include <conio>

#include <stdio>

#include <iostream>

#include <string>




void main()

{

using namespace std;


  bool bla;

  while ( bool bla=true )

 {


char input[100]; //als char deklariert weil unten cin.getline() verwendet wird 


string hi("hi");

string wg("wie gehts");

string ag("auch gut");

string ar("ausruhen");



//cin>>input; // Funkzioniert auch, jedoch interpretiert keine Leerzeichen


cin.getline(input,100); //Leerzeichen bei z.b."wie gehts" werden akzeptiert



if(hi==input)

   {

	cout<<"Hallo\n";



   }

else if(wg==input)

   {

	cout<<"gut und selbst?\n";



   }

else if(ag==input)

   {

	cout<<"na was treibst du so\n";



   }

else if(ar==input)

   {

	cout<<"ausruhen ist immer gut^^\n";



   }

else

   {

        cout<<"Ich verstehe dich nicht\n";


   }

bla = true;

 }

}


Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Antworter hat keine Ahnung. C++ ist keine "Erweiterung" von C. C ist zum größten Teil in C++ enthalten, aber eben nicht vollständig. Ich empfehle diese Seite: Incompatibilities Between ISO C and ISO C++

Und zu deinem Code: Hast du dich jetzt für C++ entschieden?


#include <conio> [B]Gibt's nicht[/B]
#include <stdio> [B]Gibt's auch nicht[/B]
#include <iostream>
#include <string>

void main() [B]int main![/B]
{
using namespace std;

bool bla; [b]hier fehlt eine Initialisierung[/b]
while ( bool bla=true ) [B]Das ist eine Zuweisung, kein Vergleich. Das bool ist hier auch falsch.[/B]
{

char input[100]; //als char deklariert weil unten cin.getline() verwendet wird
[B]Du kannst std::getline benutzen, dann kannst du auch strings verwenden.[/B]
[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen


#include <conio> [B]Gibt's nicht[/B]

also ohne conio kann ich die getch() Methode nicht verwenden. Wenn ich sie nicht habe dann leuft mein Programm einfach durch und die Konsole blinkt nur ganz kurz auf ohne das ich was lesen kann.

bool bla;

while (bla = true )

Komm nicht drauf wo es hin muss , aber eigentlich erfüllts ja seinen Zweck, dass ist damit dass Programm sich nicht Beendet und immer wieder von vorne beginnt. Das tut ja auch.

std::getline(cin,input);

Hat super geklappt mit String vielen Dank für den Tipp :D

und noch ne kleine Frage ich bekomm es einfach nicht hin z.b. mit "enum"

meiner Variablen(hi) mehrere Werte zuzuweisen wie "hi"="hallo"="hey"="hoi" ... weist was ich meine? Also Quasi ( String hi("hi","hallo",....); ). Kannst mir da weiter helfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ohne conio kann ich die getch() Methode nicht verwenden. Wenn ich sie nicht habe dann leuft mein Programm einfach durch und die Konsole blinkt nur ganz kurz auf ohne das ich was lesen kann.
Der Header heißt <conio.h>. Ist nicht Standard, aber weit verbreitet.

Das automatische Schließen eines Konsolenprogramms verhinderst du aber besser anders:

C/C++ Forum :: Automatisches Schließen verhindern

Komm nicht drauf wo es hin muss , aber eigentlich erfüllts ja seinen Zweck, dass ist damit dass Programm sich nicht Beendet und immer wieder von vorne beginnt. Das tut ja auch.

Dann tut's auch

while( true )

und noch ne kleine Frage ich bekomm es einfach nicht hin z.b. mit "enum"

meiner Variablen(hi) mehrere Werte zuzuweisen wie "hi"="hallo"="hey"="hoi" ... weist was ich meine? Also Quasi ( String hi("hi","hallo",....); ). Kannst mir da weiter helfen?

Man kann einer Variablen nicht mehrere Werte zuweisen. Eine Variable hat immer genau einen Wert. Meinst du vielleicht Arrays?
Link zu diesem Kommentar
Auf anderen Seiten teilen

also ohne conio kann ich die getch() Methode nicht verwenden. Wenn ich sie nicht habe dann leuft mein Programm einfach durch und die Konsole blinkt nur ganz kurz auf ohne das ich was lesen kann.


cin.get();

Komm nicht drauf wo es hin muss , aber eigentlich erfüllts ja seinen Zweck, dass ist damit dass Programm sich nicht Beendet und immer wieder von vorne beginnt. Das tut ja auch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man kann einer Variablen nicht mehrere Werte zuweisen. Eine Variable hat immer genau einen Wert. Meinst du vielleicht Arrays?

ja kann sein Arrays, also wenn jemand in die Konsole z.b. "hi" Renschreibt soll sie Hallo antworten und wenn jemand "hallo" reinschreibt soll die Konsole ebenfalls Hallo antworten.

Das wäre doch falsch für jedes Hallo eine Variable zu erstellen in etwa so:


string hi("hi");

string hallo("hallo");

....

if ( hi||hallo == input)

{

cout<<"Hallo"\n;

} 

Also muss man doch für eine Variable String hi.... mehrere "hi" auflisten können oder? Wie gesagt Quasi so: String hi("hi", "hallo", "hoi", "hey", "huhu");

Nur das es dann auch funktioniert :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...