如何将一个整数变量添加到字符串和char *变量中?例如:
int a = 5;
string St1 =“Book”,St2;
char * Ch1 =“Note”,Ch2;将整数转换为字符串和字符*
St2的值= ST1 + A - > Book5两个
CH 2 = CH1 + A - >注5
感谢
如何将一个整数变量添加到字符串和char *变量中?例如:
int a = 5;
string St1 =“Book”,St2;
char * Ch1 =“Note”,Ch2;将整数转换为字符串和字符*
St2的值= ST1 + A - > Book5两个
CH 2 = CH1 + A - >注5
感谢
这样做的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());
您需要创建另一个字符串大到足以容纳原始字符串跟数字(即将与该数字的每个数字相对应的字符附加到该新字符串)。
为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++不那么烦琐,但我会留给他人来描述。
错误C3861:'snprintf':标识符未找到。 – aryan 2010-01-07 10:51:22
#include
Try this out:
char *tmp = new char [ stelen(original) ];
itoa(integer,intString,10);
output = strcat(tmp,intString);
//use output string
delete [] tmp;
这是不安全的 - 因为strcat只是将更多的字节写入到原始字符串的末尾,这可能会覆盖附近的变量,从而导致程序故障或崩溃。另外,作者并没有要求修改原始字符串。 – 2010-01-07 10:32:51
这功课吗?如果是,请添加家庭作业标签。正如Dirkgently所建议的,你需要有另一个字符串,然后你可以使用sprintf来使用St1和i创建字符串“Book5”。 – Jagannath 2010-01-07 10:16:06