假设我想创建一个String,它将根据另一个字符串保存一些值。基本上,我希望能够压缩一个字符串,如下所示:aaabb - > a3b2 - 但我的问题是:
在Java中你可以这样做:
String mystr = "";
String original = "aaabb";
char last = original.charAt(0);
for (int i = 1; i < original.length(); i++) {
// Some code not relevant
mystr += last + "" + count; // Here is my doubt.
}
如您所见,我们初始化了一个空字符串,我们可以对其进行修改(mystr += last + "" + count;
)。你怎么能用C做到这一点?
答案 0 :(得分:4)
不幸的是,在C语言中你不能像在Java中那样容易:字符串内存需要动态分配。
这里有三种常见的选择:
realloc
。我建议使用第二种方法。在您的情况下,您将通过源字符串运行一次以计算压缩长度(在您的情况下,有效负载"a3b2"
为5 - 四个字符,空终结符为一个。有了这些信息,您分配五个字节,然后使用分配的缓冲区作为输出,保证适合。
答案 1 :(得分:0)
在C(不是C ++)中你可以这样做:
char mystr[1024];
char * str = "abcdef";
char c = str[1]; // will get 'b'
int int_num = 100;
sprintf(mystr, "%s%c%d", str, c, int_num);
这将在&#39; mystr&#39;:
中创建一个字符串"abcdefb100"
然后,您可以使用strcat()
将更多数据连接到此字符串strcat(mystr, "xyz"); // now it is "abcdefb100xyz"
请注意,mystr已声明为1024字节长,这是您可以在其中使用的所有空间。如果你知道你的字符串有多长,你可以在C中使用malloc()来分配空间然后使用它。
如果你想使用它,C ++有更强大的处理字符串的方法。
答案 2 :(得分:0)
您可以使用字符串连接方法strcat
:
http://www.cplusplus.com/reference/cstring/strcat/
您可以将字符串定义如下:
char mystr[1024]; // Assuming the maximum string you will need is 1024 including the terminating zero
要将字符last
转换为字符串以便能够连接它,请使用以下语法:
char lastString[2];
lastString[0] = last; // Set the current character from the for loop
lastString[1] = '\0'; // Set the null terminator
要将计数转换为字符串,您需要使用itoa
函数,如下所示:
char countString[32];
itoa (count, countString, 10); // Convert count to decimal ascii string
然后你可以使用strcat:
strcat(mystr, lastString);
strcat(mystr, countString);
如果您使用的是Visual C ++,则另一种解决方案是使用STL String类或MFC CString。