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::string

    Main(std::basic_string<char, std::char_traits<char>, std::allocator<char>

    )':

    Die Bedingungen der if-Schleife im int Main() wird gemeint:
    invalid conversion from const char*' tochar'

    Die Zeile
    array= (string) strf;
    wird gemeint:
    cannot convert `std::string' to `int'
    in assignment

    Sorry, 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::string

    Main(std::basic_string<char, std::char_traits<char>, std::allocator<char>

    )':

    Die Bedingungen der if-Schleife im int Main() wird gemeint:
    invalid conversion from const char*' tochar'

    Die Zeile
    array= (string) strf;
    wird gemeint:
    cannot convert `std::string' to `int'
    in assignment

    Sorry, 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 🙂


Anmelden zum Antworten