String und char addieren



  • Also das geht bei mir:

    std::string s( "Hallo" );
    char c[3] = { ' ', 'D', 'u' };
    s=s+c[0];
    s=s+c[1];
    s=s+c[2];
    
    std::cout << s << std::endl;
    // Ausgabe: Hallo Du
    

    Schön ist aber auch

    std::string s( "Hallo" );
    char c[3] = { ' ', 'D', 'u' };	
    for ( unsigned int idx = 0; idx < sizeof( c ); idx++ ) {
      s += c[idx];	
    }
    std::cout << s << std::endl;
    // Ausgabe: Hallo Du
    

    Gruß

    H.-Gerd

    http://www.brainsandbytes.de



  • hi!

    müsste so gehn:

    char s[]="Hallo"; 
    string einzeichen = s[0];
    string st += einzeichen;
    
    const char text[] = "hello world";
    string str = text;
    

    fällt euch noch was ein??

    cu



  • Funzt irgendwie alles nicht. Hier och mal der Codeschnipsel mir meinem Prob

    int SendBytes(unsigned char b[], int lastByte)//sendet Bytes an verbundenen Server 
    {	
    	try
    	{
    		string S, D;
    		int i, j;
    		for(j=0;j<lastByte;j++)
    		{
    			S +=(S + "" + b[j]);
    		}
    		D = ("S = " + S);
    		Logbuch (D);
    		i=send( s, b, lastByte, 0 );
    


  • anstatt

    S +=(S + "" + b[1]);
    

    mach mal so:

    S.reserve(2 * S.length() + 2);
    
    S += S;
    S += "";
    S += b[1];
    


  • @ssm danke so funktioniert das 👍 🙂 👍



  • bigborre schrieb:

    @ssm danke so funktioniert das 👍 🙂 👍

    hättest du deinen Codeschnipsel früher gezeigt, hättest du früher eine Antwort bekommen :p



  • @bigborre
    Kann MFK's Aussage eigentlich nochmals aufgreifen, etwas mehr Grundlagenkenntnisse schaden nie.
    char, signed char und unsigned char sind 3 unterschiedliche Typen. Und std::string ist als std::basic_string mit Elementtyp char definiert. Deshalb funktioniert bei dir der + Operator auch nicht, da Parameter b vom Typ unsigned char* ist. Was anderes ist es, wenn er vom Typ char* wäre.
    Warum funktioniert nun Operator +=? Ganz einfach, unsigned char kann implizit in char umgewandelt werden, unsigned char* in char* hingegen nicht.



  • char, signed char und unsigned char sind 3 unterschiedliche Typen.

    nee! es gibt signed char und unsigned char, das blosse char ist nur plattformabhängig und ist im einzelfall signed oder unsigned! so, das wären dann zwei unterschiedlichen typen...


  • Mod

    chrigi schrieb:

    char, signed char und unsigned char sind 3 unterschiedliche Typen.

    nee! es gibt signed char und unsigned char, das blosse char ist nur plattformabhängig und ist im einzelfall signed oder unsigned! so, das wären dann zwei unterschiedlichen typen...

    es sind trotzdem 3 unterschiedliche typen und nicht etwa ein typedef auf das eine oder das andere. wovon man sich leicht überzeugen kann:

    #include <iostream>
    
    template< class T > T foo(T& x);
    template<> unsigned char foo<unsigned char>(unsigned char& x) { return x; }
    template<> signed char foo<signed char>(signed char& x) { return x; }
    
    int main()
    {
        signed char a = 'a';
        unsigned char b = 'b';
        char c = 'c';
        std::cout << foo( a ) << foo( b ) << foo( c );
    }
    

    führt zu einem linker error: undefined reference to `char foo<char>(char&)'



  • chrigi schrieb:

    nee! es gibt signed char und unsigned char, das blosse char ist nur plattformabhängig und ist im einzelfall signed oder unsigned! so, das wären dann zwei unterschiedlichen typen...

    Es ist richtig, dass char implementationsspezifiach entweder signed oder unsigned ist. Trotzdem ist es ein separater Typ.
    Um den Standard mal zu zitieren

    It is implementation-defined whether a char object can hold negative values. Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types.

    😉



  • schande über meinem haupt! 😃


Anmelden zum Antworten