Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338

    [c++] costruire una stringa partendo da un char

    Ovviamente nn sono molto pratico di c++
    pero' in c avevo lavorato qualche anno fa, ora mi sto evolvendo..

    banale domanda, ma ho gia' cercato di rispondermi inutilmente con questo esercizio sulle stringhe

    #include <iostream>
    #include <string>
    using namespace std;

    int main() {
    string s[10];

    // inizializza e stampa le stringhe
    for (int i = 0; i < 10; i++)
    {
    char s1 = 'a' + i;
    s[i] = s1;
    s[i] = "-" + s[i] + "-";
    s[i].insert( 0, i+1, s1 );
    cout << "s[" << i << "] = " << s[i] << endl;
    }
    }

    io volevo inizializzare le stringhe, pensavo di poterlo fare semplicemente con

    s[i] = 'a' + i; // che funziona!

    poi mi sono detto, ok, aggiungiamo un carattere e ho scritto:

    s[i] = "-" + string('a' + i); // che da errore : invalid conversion from `char' to `const char*'

    sto cercando il modo piu` semplice ed economico per costruire una stringa di tipo string a partire da alcuni char,
    qual'e'?

    ho visto che .insert funziona, c'e' qualche altra funzione?

    i cast non vanno (quelli che ho provato)

    scusate se sono stato un po'contorto nella spiegazione

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    l'operatore += è sovraccaricato

    puoi fare così:

    codice:
    #include <iostream> 
    #include <string> 
    using namespace std; 
    
    int main() { 
    string s("");
    char c; 
    
    for(int i = 0; i < 10; i++) {
    	c = 'a' + i;
    	s += c;
    }
    
    cout << s << endl;
    
    return 0;
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    ok,

    s[i] = c;

    o

    s[i] += c;

    funzionano, quello che non va (e vorrei fare) e' una costruzione composta tipo:

    s[i] = "stringa" + c1 + "stringa2" + c2;

    se lo faccio i puntatori vanno dove vogliono, prova con il tuo codice e dimmi..

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ora ho capito, ecco un esempio:

    codice:
    #include <iostream> 
    #include <string> 
    using namespace std; 
    
    int main() { 
    string s(""); 
    
    // inizializza e stampa le stringhe 
    for (int i = 0; i < 10; i++) 
    { 
    char s1 = 'a' + i; 
    s = s1; 
    s = "-" + s + "-";  
    cout << "s[" << i << "] = " << s << endl; 
    } 
    
    return 0;
    }
    quello che non ho capito è perchè crei un array di stringhe.

    Anche con funziona ugualmente, è la funzione insert che ha me da errori, poi mi da un output come questo che è uguale usando o non usando gli array:

    s[0] = -a-
    s[1] = -b-
    s[2] = -c-
    s[3] = -d-
    s[4] = -e-
    s[5] = -f-
    s[6] = -g-
    s[7] = -h-
    s[8] = -i-
    s[9] = -j-

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    grazie per la collaborazione

    pero' quello che mi hai appena scritto io l'ho riportato nel primo listato

    char s1 = 'a' + i;
    s[i] = s1;
    s[i] = "-" + s[i] + "-";


    e quindi so che funziona, quello che la fa andare e'

    s[i] = s1;

    che fa un cast implicito da char a string, pero'( e qui sta il bello) NON va qualcosa tipo:

    s[i] = "ciao, questo e' il " + c + " tentativo..";

    dove c e'un char

    ps: uso un array di stringhe perche' cosi' chiede l'esercizio che devo svolgere (da thinking in c++)

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    il problema è che in C++ o in C quando si scrive qualche stringa fra le "" il tipo di dato sarà um char*, in altri linguaggio come il Java o il D la classe string è un tipo incapsulato, quindi è possibile fare cose come queste "ciao".lenght() ad esempio o "ciao" + "a tutti".
    Quindi nel tuo codice, quello che non funziona, praticamente hai questo:

    codice:
    stringa = char* + char + char*
    come puoi vedere l'operatore + viene applicato a tipi primitivi che non sovraccaricano l'operatore +, se, come hai giustamente fatto, casti implicitamente un char in un string ottiene questa "formula"

    codice:
    string = char* + stringa + char*
    la seconda stringa sovraccaricando + permette di concatenarli, quindi se nell'espressione dalla parte destra non c'è nessun oggetto string che sovraccarica l'operatore non puoi farci niente.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    ok, non si può fare un cast da char a string?

    codice:
    stringa = char* + cast_to_string(char) + char*
    perche' lo trovo molto piu' leggibile di utilizzare un cast implicito..

  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    un cast esplicito si può fare, ma non direttamente.
    Se fai

    codice:
    (string)char
    viene dato errore dato che è un cast non suypportato, per forzare i cast di questo tipo C++ ha una funzione particolare, si chiamava tipo type_cast<string> o roba simile, se la trovo la posto.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.