c++ Stringprobleme
-
Hallo Leute!
Ich habe mit dem Code Probleme.
Könntet ihr mir bitte mir sagen(besser:selbst machen), was ich verändern soll, dass der Code läuft.
Er soll String nach dem Typ #xxx suchen und diese in Buchstaben umrechnen (ASCII)(#065='A') und sie zusammenfügen, um sie auszugeben.#include <string> #include <fstream> #include <iostream> #include <conio.h> using namespace std; int input(); int input2(string a); string input3(); string input4(); int input5(); string Main(string str1); int output(string str3); int output2(char m1, string str3); int switch1(string str3); int switch2(string str3); int switch3(string str3); int switch4(); int main() { string str1,str3; str1=input(); str3=Main(str1); output(str3); return 0; } int input() { string letter; cout <<"Einlesen der Datei(1) oder direkte Eingabe über die Tastatur(2)"<< endl; cin >> letter; input2(letter); return 0; } int input2(char letter) { switch(letter) { case 'a': input3(); break; case 'b': input4(); break; default: input5(); break; } } string input3() { string str1; cout<<"Name der Ausgangsdatei:Alt.htm"<<endl; getch(); ifstream myFile("Neu.htm"); if(!myFile) { cout <<"Error opening output file"<<endl; } while (!myFile.eof()) { getline(myFile,str1); cout<<str1<<endl; } myFile.close(); return str1; } string input4() { string str1; cout <<"Bitte Text eingeben.Beenden der Eingabe mit \n"<<endl; getline(cin,str1); return str1; } int input5() { cout<<"Eingabefehler"<<endl; getch(); return -1; } string Main(string str1) { int c,c1,c2,c3; double i,e,b; string str2,str3,str4,str11,str12,str13,strf; int array; char arraya; string fullstring; c =1; b = str1.size(); str2.assign(str1,1,2000000); e=b+1; c1=c+1; c2=c+2; c3=c+3; str3=""; for (i=0;i<e;i++) { if ((str2.at(c)="#")&&(str2.at(c1)="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0")&&(str2.at(c2)="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0")&&(str2.at(c3)="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0")) { //Durch die if Schleife soll die Zeichenkette #xxx (xxx steht für eine Zahl zwischen 0 und 127)gefunden werden. str11= str2.at(c1); //Die Stringelemente str2.at(c1) bis str2.at(c3) sollen addiert werden str12=str2.at(c2); // s.o. str13=str3.at(c3); // s.o. fullstring =str11; // s.o. fullstring.append(str12); // s.o. fullstring.append(str13); // s.o. strf=(str11 + str12 + str13); // s.o. array= (string) strf; //Der String xxx (Gewonnen aus #xxx[beispiel: 065]) soll, da er eine Zahl ist, erst nach Integer konvertiert werden, arraya=(char) array; //um dann aus 065 ein 'A' zu machen. str4=arraya; //str4 beinhaltet immer die neu gewonnenen Buchstaben und str3 alle bisher gewonnenen Buchstaben. str3=str3+str4; // c wird hocgezählt, um die Suche ein Zeichen nach rechts zu verschieben c++; } else { c++; } } return str3; //Das Ergebnis wird per return dem Hauptprogramm (int main) übergeben } int output(string str3) { char m1; cout <<"Möchtest du das Ergebnis nur angezeigt bekommen(1) oder speichern(2) oder beides(3)?"<<endl; cin >> m1; output2(m1,str3); return 0; } int output2(char m1, string str3) { switch(m1) { case 'a': switch1(str3); break; case 'b': switch2(str3); break; case 'c': switch3(str3); break; default: switch4(); break; } } int switch1(string str3) { cout <<"Ergebnis:"<<str3<<endl; getch(); } int switch2(string str3) { cout <<"Name der Enddatei:Neu.htm"<<endl; ofstream myFile("Neu.htm",ios::app); if (!myFile) { cout <<"Error opening output file"<<endl; return -1; } myFile << str3 <<endl; myFile.close(); return 0; } int switch3(string str3) { cout <<"Name der Enddatei?Neu.htm" <<endl; getch(); ofstream myFile("Neu.htm",ios::app); if(!myFile) { cout <<"Error opening output file"<< endl; return -1; } myFile<<str3<<endl; myFile.close(); cout <<"Ergebnis:" << str3 << endl; getch(); return 0; } int switch4() { cout<<"Eingabefehler"<<endl; getch(); return 0; }
-
Nö machen wir nicht.
Wenn Du aber das Problem was DU hast etwas genauer beschreibst .....
-
Mein Problem ist, dass der Compiler die if-schleife und eine Typenumwandelung
im int main() bemängelt.
Fehlermeldungen, die den int Main() betreffen:Fehler ohne Zeilenangabe:
In function `std::stringMain(std::basic_string<char, std::char_traits<char>, std::allocator<char>
)':
Die Bedingungen der if-Schleife im int Main() wird gemeint:
invalid conversion fromconst char*' to
char'Die Zeile
array= (string) strf;
wird gemeint:
cannot convert `std::string' to `int'
in assignmentSorry, wenn ich nicht höflich genug war.
Volker
-
Mein Problem ist, dass der Compiler die if-schleife und eine Typenumwandelung
im int main() bemängelt.
Fehlermeldungen, die den int Main() betreffen:Fehler ohne Zeilenangabe:
In function `std::stringMain(std::basic_string<char, std::char_traits<char>, std::allocator<char>
)':
Die Bedingungen der if-Schleife im int Main() wird gemeint:
invalid conversion fromconst char*' to
char'Die Zeile
array= (string) strf;
wird gemeint:
cannot convert `std::string' to `int'
in assignmentSorry, wenn ich nicht höflich genug war.
Volker
-
Hi,
Also erstmal muss ich was zu deinem Code sagen: Unglaublich verwirrend!
Ich konnte auch nicht genau rauslesen was deine Fehler sind. Hier mal wie ich es machen würde.#include <string> #include <fstream> #include <iostream> int main() { std::string ReadBuf; // Für jeweils die aktuelle Zeile std::string Ergebnis;// ... std::ifstream Datei( "test.txt" ); //... if ( !Datei.is_open() ) // Raus wenn die Datei nicht geöffnet ist return 0; while ( !Datei.eof() ) // Sind noch Daten vorhanden? { std::getline( Datei, ReadBuf ); // Zeile in ReadBuffer einlesen int position = ReadBuf.find( "#", 0 ); // '#' Zeichen finden while ( position >= 0 ) // Zeichen gefunden? { char temp[3]; // Buffer für die Zahl ReadBuf.copy( &temp[0], 3, position + 1); // Zahl in temp kopieren int zahl = atoi( temp ); // einen int aus temp erzeugen char buchstabe = (char)zahl; // in einen Buchstaben konvertieren Ergebnis += buchstabe; // und an den Ergebnis String hängen position =ReadBuf.find "#",position+1 ); //Weitere '#' Zeichen in der Zeile suchen } } std::cout << Ergebnis << std::endl; // Ergebnis ausgeben return 0; }
-
Hallo Leute!
Die Zeile
position =ReadBuf.find "#",position+1 );
sollte besser heißen:
position =ReadBuf.find ("#",position+1 );Doch dann werden 32 Linkererrors produziert.
Kann mir einer sagen, was am Code von Kaasbrot dann noch falsch ist.
Volker