Jawaban:
Pertama-tama, jangan gunakan char*atau char[N]. Gunakan std::string, maka semuanya menjadi sangat mudah!
Contoh,
std::string s = "Hello";
std::string greet = s + " World"; //concatenation easy!
Mudah bukan?
Sekarang jika Anda membutuhkan char const *karena alasan tertentu, seperti ketika Anda ingin meneruskan ke beberapa fungsi, maka Anda dapat melakukan ini:
some_c_api(s.c_str(), s.size());
dengan asumsi fungsi ini dideklarasikan sebagai:
some_c_api(char const *input, size_t length);
Jelajahi std::stringdiri Anda mulai dari sini:
Semoga membantu.
Sejak itu C ++ mengapa tidak menggunakan std::stringbukan char*? Penggabungan akan menjadi sepele:
std::string str = "abc";
str += "another";
operator+=melakukan deallocation dan alokasi. Alokasi heap adalah salah satu operasi paling mahal yang biasa kami lakukan.
Jika Anda memprogram dalam C, maka asumsikan namebenar-benar adalah array dengan panjang tetap seperti yang Anda katakan, Anda harus melakukan sesuatu seperti berikut:
char filename[sizeof(name) + 4];
strcpy (filename, name) ;
strcat (filename, ".txt") ;
FILE* fp = fopen (filename,...
Anda lihat sekarang mengapa semua orang merekomendasikan std::string?
Ada fungsi strcat () dari pustaka C porting yang akan melakukan penggabungan "C style string" untuk Anda.
BTW meskipun C ++ memiliki banyak fungsi untuk menangani string gaya-C, ini bisa bermanfaat bagi Anda untuk mencoba dan membuat fungsi Anda sendiri yang melakukan itu, seperti:
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;
}
...lalu...
char s1[] = "file_name";
char *c = con(s1, ".txt");
... hasilnya adalah file_name.txt.
Anda mungkin juga tergoda untuk menulis sendiri operator +namun operator IIRC membebani dengan hanya pointer karena argumen tidak diperbolehkan.
Selain itu, jangan lupa hasil dalam kasus ini dialokasikan secara dinamis, jadi Anda mungkin ingin memanggil delete untuk menghindari kebocoran memori, atau Anda dapat memodifikasi fungsi untuk menggunakan array karakter yang dialokasikan tumpukan, asalkan tentu saja itu memiliki panjang yang cukup.
strncat()fungsi alternatif yang biasanya lebih baik
strncattidak relevan di sini, karena kita sudah mengetahui panjang parameter kedua ".txt". Jadi itu hanya akan terjadi strncat(name, ".txt", 4), yang tidak memberi kita apa-apa.
strcat (tujuan, sumber) dapat digunakan untuk menggabungkan dua string di c ++.
Untuk memiliki pemahaman yang mendalam Anda dapat mencari di link berikut-
Lebih baik menggunakan kelas string C ++ daripada string C gaya lama, hidup akan jauh lebih mudah.
jika Anda sudah memiliki gaya string lama, Anda dapat mengonversinya ke kelas 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
//String appending
#include <iostream>
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<<str1;
getchar();
return 0;
}