вставьте целое число в строку и символ * - PullRequest
0 голосов
/ 07 января 2010

Как я могу добавить целочисленную переменную в строку и переменную char *? например:
int a = 5;
строка St1 = "Книга", St2;
char * Ch1 = "Примечание", Ch2;

St2 = St1 + a -> Book5
Ch2 = Ch1 + a -> Note5

Спасибо

Ответы [ 4 ]

2 голосов
/ 07 января 2010

C ++ способ сделать это:

std::stringstream temp;
temp << St1 << a;
std::string St2 = temp.str();

Вы также можете сделать то же самое с Ch1:

std::stringstream temp;
temp << Ch1 << a;
char* Ch2 = new char[temp.str().length() + 1];
strcpy(Ch2, temp.str().c_str());
1 голос
/ 07 января 2010

для char* вам нужно создать другую переменную, которая достаточно длинна для обоих, например.Вы можете «зафиксировать» длину выходной строки, чтобы исключить возможность превышения конца строки.Если вы сделаете это, будьте осторожны, чтобы сделать это достаточно большим, чтобы вместить целое число, в противном случае вы можете найти, что книга + 50 и книга + 502 обе получаются как книга + 50 (усечение).

Вот каквручную рассчитать объем необходимой памяти.Это наиболее эффективно, но подвержено ошибкам.

int a = 5;
char* ch1 = "Book";
int intVarSize = 11; // assumes 32-bit integer, in decimal, with possible leading -
int newStringLen = strlen(ch1) + intVarSize + 1; // 1 for the null terminator
char* ch2 = malloc(newStringLen);
if (ch2 == 0) { exit 1; }
snprintf(ch2, intVarSize, "%s%i", ch1, a);

ch2 теперь содержит объединенный текст.

В качестве альтернативы, и немного менее сложно, а также более красиво (но менее эффективно), вы также можете сделать«пробный запуск» printf для получения необходимой длины:

int a = 5;
char* ch1 = "Book";
// do a trial run of snprintf with max length set to zero - this returns the number of bytes printed, but does not include the one byte null terminator (so add 1)
int newStringLen = 1 + snprintf(0, 0, "%s%i", ch1, a);
char* ch2 = malloc(newStringLen);
if (ch2 == 0) { exit 1; } 
// do the actual printf with real parameters.
snprintf(ch2, newStringLen, "%s%i", ch1, a);

, если ваша платформа включает asprintf, тогда это намного проще, поскольку asprintf автоматически выделяет правильный объем памяти для вашей новой строки.

int a = 5;
char* ch1 = "Book";
char* ch2;
asprintf(ch2, "%s%i", ch1, a);

ch2 теперь содержит комбинированный текст.

c ++ гораздо менее сложен, но я оставлю это другим, чтобы описать.

0 голосов
/ 07 января 2010
Try this out:
char *tmp  = new char [ stelen(original) ];
itoa(integer,intString,10);

output = strcat(tmp,intString);

//use output string 

delete [] tmp;
0 голосов
/ 07 января 2010

Вам нужно создать еще одну строку, достаточно большую, чтобы в ней содержалась исходная строка, за которой следовал номер (т.е. добавляли символ, соответствующий каждой цифре числа, к этой новой строке).

...