Ho una variabile di classe privata (nome char [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.Come concatenare due stringhe in C++?
risposta
Prima di tutto, non utilizzare 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 avete bisogno di char const *
per qualche motivo, ad esempio quando si desidera passare a qualche funzione, allora si può fare questo:
some_c_api(s.c_str(), s.size());
assumendo questa funzione è dichiarata come:
some_c_api(char const *input, size_t length);
Esplora std::string
te a partire da qui:
Spero che questo aiuti.
Poiché è C++ perché non utilizzare std::string
anziché char*
? concatenazione sarà banale:
std::string str = "abc";
str += "another";
C'è una funzione strcat() dalla libreria C con porting che eseguirà la concatenazione "C style string" per voi.
BTW, anche se C++ ha un sacco di funzioni per trattare con le stringhe in stile C, potrebbe essere vantaggioso per voi provi e venire con la propria funzione che lo fa, qualcosa di simile:
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 cui risultato è file_name.txt
.
Si potrebbe anche essere tentati di scrivere il proprio operator +
tuttavia sovraccarichi operatore IIRC con solo puntatori come argomenti non è consentito.
Inoltre, non dimenticare che il risultato in questo caso è allocato dinamicamente, 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, a condizione ovviamente ha una lunghezza sufficiente
Vedere il mio commento alla risposta di IcyFlame. – TonyK
C'è anche la funzione 'strncat()' che di solito è un'alternativa migliore – nogard
@nogard: 'strncat' è irrilevante qui, perché conosciamo già la lunghezza del secondo parametro' ".txt" '. Quindi sarebbe semplicemente 'strncat (name," .txt ", 4)', che non ci guadagna nulla. – TonyK
Se stavate programmando in C, poi assumendo name
davvero è un array di lunghezza fissa come dici, devi fare qualcosa di simile al seguente:
char filename[sizeof(name) + 4];
strcpy (filename, name) ;
strcat (filename, ".txt") ;
FILE* fp = fopen (filename,...
Vedete ora perché ognuno raccomanda std::string
?
//String appending
#include<iostream>
using namespace std;
void stringconcat(char *str1, char *str2){
while (*str1 != '\0'){
str1++;
}
while(*str2 != '\0'){
*str1 = *str2;
str1++;
str2++;
}
return ;
}
int main( ){
char str1[100];
cin.getline(str1,100);
char str2[100];
cin.getline(str2,100);
stringconcat(str1,str2);
cout<<str1;
getchar();
return 0;
}
.......... cosa sto vedendo? –
strcat (destinazione, origine) può essere utilizzato per concatenare due stringhe in C++.
di avere una comprensione profonda si può cercare nel seguente link-
E 'meglio utilizzare C++ classe string, invece di stringa vecchio stile C, la vita sarebbe molto più facile.
se la stringa vecchio stile che avete esistente, è possibile convertire alla classe string
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
cout<<greeting + "and there \n"; //will not compile because concat does \n not work on old C style string
string trueString = string (greeting);
cout << trueString + "and there \n"; // compiles fine
cout << trueString + 'c'; // this will be fine too. if one of the operand if C++ string, this will work too
- 1. Come concatenare due atomi/stringhe?
- 2. Come concatenare due stringhe su iPhone?
- 3. concatenare due stringhe char * in un programma C
- 4. Come concatenare 2 stringhe?
- 5. Come posso concatenare due array in C?
- 6. Come concatenare due LPCWSTR in C++
- 7. Come concatenare due stringhe in SQL Server 2005
- 8. come concatenare le stringhe?
- 9. Come concatenare le stringhe?
- 10. Come concatenare le stringhe in gnuplot?
- 11. Come concatenare più stringhe Unicode?
- 12. Come concatenare concatenando stringhe in Tcl?
- 13. Come concatenare due stringhe per creare un percorso completo
- 14. Come concatenare tre stringhe nell'iphone
- 15. Come concatenare verticalmente due array in Python?
- 16. DB2: come concatenare stringhe null in DB2?
- 17. Come concatenare 2 stringhe in NSIS
- 18. Come concatenare due matrici in Python?
- 19. Concatenare stringhe letterali
- 20. Perché non concatenare due stringhe e assegnarle a un simbolo?
- 21. Qualsiasi motivo per non utilizzare '+' per concatenare due stringhe?
- 22. constexpr per concatenare due o più stringhe di carattere
- 23. Come concatenare due storie git?
- 24. Come concatenare due UIGestureRecognizer insieme?
- 25. Come concatenare due liste element-wise in Python?
- 26. Come concatenare due matrici in Python OpenCV?
- 27. Come concatenare due file binari in Erlang?
- 28. Come concatenare rapidamente due righe in Vim?
- 29. concatenare due int in java
- 30. Come concatenare le stringhe con le variabili in PowerShell?
Qual è la complessità temporale di questa concatenazione di stringhe? – d34th4ck3r
@ d34th4ck3r: è lineare. – Nawaz