У меня есть переменная private class (char name [10]), к которой я хотел бы добавить расширение .txt, чтобы я мог открыть файл, присутствующий в каталоге. Как мне это сделать? Было бы предпочтительнее создать новую строковую переменную, содержащую конкатенированную строку.Как объединить две строки в C++?
ответ
Прежде всего, не используйте char*
или char[N]
. Используйте std::string
, тогда все остальное станет так просто!
Примеры,
std::string s = "Hello";
std::string greet = s + " World"; //concatenation easy!
Легко, не так ли?
Теперь, если вам нужно char const *
по какой-то причине, например, когда вы хотите передать какой-либо функции, то вы можете сделать это:
some_c_api(s.c_str(), s.size());
выполнению этой функции объявлен как:
some_c_api(char const *input, size_t length);
Исследуйте std::string
себя, начиная отсюда:
Надеюсь, что это поможет.
Поскольку это C++, почему бы не использовать std::string
вместо char*
? конкатенации будет тривиальным:
std::string str = "abc";
str += "another";
Функция strcat() из портированной библиотеки C, которая будет выполнять конкатенацию «C style string» для вас.
BTW, хотя C++ имеет кучу функций для решения строк C-типа, это может быть полезным для вас попробовать и придумать свои собственные функции, что делает что-то вроде:
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;
}
... и затем ...
char s1[] = "file_name";
char *c = con(s1, ".txt");
... Результатом является file_name.txt
.
Возможно, у вас также возникнет соблазн написать свой собственный operator +
, однако перегрузка IIRC-оператора с помощью только указателей в качестве аргументов не допускается.
Кроме того, не забудьте, что результат в этом случае динамически распределен, поэтому вы можете захотеть удалить его, чтобы избежать утечек памяти, или вы можете изменить функцию для использования массива символов, выделенного стекю, имеет достаточную длину.
Посмотрите мои комментарии к ответу IcyFlame. – TonyK
Существует также функция 'strncat()', которая обычно лучше альтернатива – nogard
@nogard: 'strncat' здесь не имеет значения, потому что мы уже знаем длину второго параметра' '.txt' '. Таким образом, это будет просто 'strncat (name," .txt ", 4)', что не дает нам ничего. – TonyK
Если вы программировали на C, то при условии, name
действительно является фиксированной длины массива, как вы говорите, что вам нужно сделать что-то вроде следующего:
char filename[sizeof(name) + 4];
strcpy (filename, name) ;
strcat (filename, ".txt") ;
FILE* fp = fopen (filename,...
Вы видите теперь, почему все рекомендует 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;
}
.......... что я вижу? –
strcat (destination, source) может использоваться для объединения двух строк в C++.
Чтобы иметь глубокое понимание вы можете поиск в следующем ссылка-
Лучше использовать C++ строкового класса вместо строки старого стиля C, жизнь была бы намного проще.
, если у вас уже есть строка старого стиля, вы можете тайные для струнного класса
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. Объединить две строки итеративно - C
- 2. Как объединить две строки?
- 3. Объединить две символьные строки * в программе C
- 4. Как объединить две комбинированные строки?
- 5. Как объединить две строки в списке Python
- 6. объединить две строки в ArrayList
- 7. Объединить две строки Отчетливо
- 8. Как объединить две строки _T?
- 9. Невозможно объединить две строки.
- 10. Объединить две строки в Excel
- 11. Объединить две строки в DateTime
- 12. Объединить две строки в Java
- 13. Объединить две строки в свинге
- 14. Как объединить две строки в PHP?
- 15. Как объединить две строки в Java
- 16. Как объединить две строки в сборке?
- 17. Как объединить две строки в H2O
- 18. Как объединить две строки в Fortran
- 19. Как объединить две строки в Smarty?
- 20. Как объединить две строки в TCL?
- 21. Как объединить две строки в один список?
- 22. Как объединить две широкие строки, используя макрос в C?
- 23. Объединить две матрицы в C
- 24. Объединить две строки - особый случай
- 25. Объединить две строки, возвращаемые SAX
- 26. Объединить две закодированные строки Base64
- 27. Объединить две строки без перекрестка
- 28. объединить две строки массива в JavaScript
- 29. Объединить две строки (текстовые файлы)
- 30. Объединить две строки с петлей
Какова временная сложность этой конкатенации? – d34th4ck3r
@ d34th4ck3r: Он линейный. – Nawaz