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.

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top