如何将整数变量添加到字符串和 char* 变量?例如:
int a = 5;
字符串 St1 = “书”,St2;
char *Ch1 = "注", Ch2;
St2 = St1 + a --> Book5
Ch2 = Ch1 + a --> Note5
谢谢
这样做的 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*
您需要创建另一个对两者都足够长的变量。您可以“修复”输出字符串的长度,以消除超出字符串末尾的可能性。如果这样做,请注意使其足够大以容纳整数,否则您可能会发现 book+50 和 book+502 都以 book+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++ 不那么繁琐,但我将把它留给其他人来描述。
您需要创建另一个足够大的字符串来容纳原始字符串,后跟数字(即,将与数字的每个数字对应的字符附加到这个新字符串)。
Try this out:
char *tmp = new char [ stelen(original) ];
itoa(integer,intString,10);
output = strcat(tmp,intString);
//use output string
delete [] tmp;