Come concatenare due stringhe in C ++?

Ho una variabile di class privata (char name [10]) a cui vorrei aggiungere l’estensione .txt in modo che possa aprire il file presente nella directory. Come faccio a fare questo? Sarebbe preferibile creare una nuova variabile stringa che contenga la stringa concatenata.

Prima di tutto, non usare char* o char[N] . Usa std::string , quindi tutto il resto diventa così facile!

Esempi,

 std::string s = "Hello"; std::string greet = s + " World"; //concatenation easy! 

Facile, non è vero?

Ora se hai bisogno di char const * per qualche motivo, ad esempio quando vuoi passare ad alcune funzioni, puoi farlo:

 some_c_api(s.c_str(), s.size()); 

assumendo che questa funzione sia dichiarata come:

 some_c_api(char const *input, size_t length); 

Esplora std::string te stesso iniziando da qui:

  • Documentazione di std :: string

Spero possa aiutare.

Dal momento che è C ++ perché non usare std::string invece di char* ? La concatenazione sarà banale:

 std::string str = "abc"; str += "another"; 

Se stavate programmando in C, supponendo che il name veramente un array a lunghezza fissa come dici tu, devi fare qualcosa come il seguente:

 char filename[sizeof(name) + 4]; strcpy (filename, name) ; strcat (filename, ".txt") ; FILE* fp = fopen (filename,... 

Vedete ora perché tutti raccomandano std::string ?

Esiste una funzione strcat () dalla libreria C con porting che eseguirà la concatenazione “C style string” per te.

BTW anche se C ++ ha un sacco di funzioni per gestire le stringhe in stile C, potrebbe essere utile per te provare e trovare la tua funzione che lo fa, qualcosa come:

 char * con(const char * first, const char * second) { int l1 = 0, l2 = 0; const char * f = first, * l = second; // step 1 - find lengths (you can also use strlen) while (*f++) ++l1; while (*l++) ++l2; char *result = new char[l1 + l2]; // then concatenate for (int i = 0; i < l1; i++) result[i] = first[i]; for (int i = l1; i < l1 + l2; i++) result[i] = second[i - l1]; // finally, "cap" result with terminating null char result[l1+l2] = '\0'; return result; } 

...e poi...

 char s1[] = "file_name"; char *c = con(s1, ".txt"); 

... il risultato è file_name.txt .

Si potrebbe anche essere tentati di scrivere il proprio operator + tuttavia gli overload dell'operatore IIRC con solo puntatori poiché gli argomenti non sono consentiti.

Inoltre, non dimenticare che il risultato in questo caso è assegnato dynamicmente, quindi potresti voler chiamare delete su di esso per evitare perdite di memoria, oppure potresti modificare la funzione per usare array di caratteri allocati nello stack, purché abbia una lunghezza sufficiente.

strcat (destination, source) può essere usato per concatenare due stringhe in c ++.

Per avere una comprensione profonda è ansible cercare nel seguente link-

http://www.cplusplus.com/reference/cstring/strcat/

È meglio usare la class di stringa C ++ invece della stringa C vecchio stile, la vita sarebbe molto più semplice.

se hai una stringa vecchio stile esistente, puoi eseguire una covert in class string

  char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; cout< 
 //String appending #include  using namespace std; void stringconcat(char *str1, char *str2){ while (*str1 != '\0'){ str1++; } while(*str2 != '\0'){ *str1 = *str2; str1++; str2++; } } int main() { char str1[100]; cin.getline(str1, 100); char str2[100]; cin.getline(str2, 100); stringconcat(str1, str2); cout<