restituire char1 + char2? Non è possibile?
Domanda
Sto cercando di restituire una stringa da una funzione. Che fondamentalmente aggiunge alcuni caratteri insieme e restituisce la rappresentazione della stringa.
string toString() {
char c1, c2, c3;
// some code here
return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}
È possibile restituire valori booleani come return c1 == 'x'. Non è possibile restituire i valori delle stringhe? So che è possibile in questo modo:
string result;
result.append(c1, c2);
return result;
Sono nuovo a C ++, quindi ho pensato che ci dovesse essere una soluzione più elegante in giro.
Soluzione
No, non puoi farlo perché l'aggiunta di due char insieme non ti dà una stringa. Ti dà un altro carattere; in questo caso 'a'+'b'
in realtà ti dà '├'
(su Windows con lo standard CP_ACP pagina del codice). Char è un tipo ordinale, come i numeri interi e il compilatore sa solo come aggiungerli nei modi più elementari. Le stringhe sono una bestia completamente diversa.
Puoi farlo, ma devi essere esplicito:
return string(1, c1) + string(1, c2)
Ciò costruirà due stringhe temporanee, ciascuna inizializzata su una ripetizione del carattere passata come secondo parametro. Da operator+
è definito che le stringhe siano una funzione di concatenazione, ora puoi fare quello che vuoi.
Altri suggerimenti
char
I tipi in C ++ (così come in C) sono tipi integrali. Si comportano come tipi integrali. Proprio come quando scrivi 5 + 3
Nel tuo codice, ti aspetti di diventare integrale 8
come risultato (e non stringa "53"
), quando scrivi c1 + c2
Nel tuo codice sopra dovresti aspettarti di ottenere un risultato integrale: la somma aritmetica di c1
e c2
.
Se lo vuoi davvero concatenare Due caratteri per formare una stringa, devi farlo diversamente. Ci sono molti modi per farlo. Ad esempio, puoi formare una stringa in stile C
char str[] = { c1, c2, `\0` };
che sarà implicitamente convertito a std::string
di
return str;
Oppure puoi costruire un std::string
Immediatamente (che può essere fatto anche in diversi modi).
È possibile convertire ogni caratteri in una stringa, quindi utilizzare +:
return string(1, c1)+string(1, c2);
In alternativa, String ha il sovraccarico dell'operatore + per funzionare con i caratteri, quindi puoi scrivere:
return string(1, c1) + c2;
Indipendentemente dal metodo che scegli, dovrai convertire il tipo integrale char
a una corda in stile C (char*
) o una stringa in stile C ++ (std::string
).
return string(1, c1) + c2;
Questo costruisce una stringa a 1 carattere, contenente C1, quindi aggiunge (sovraccarico in concatenato) C2 (creando un'altra stringa), quindi la restituisce.
No, aggiungono solo i codici dei caratteri. Devi convertirli in stringhe.
È necessario creare una stringa dai caratteri.
E quindi restituire la stringa (in realtà una copia della stringa)