我有一个stringstream,我有8个char数组:
char str1[4] = "2001";
char str2[4] = "677F";
char str3[4] = "0000";
char str4[4] = "4004";
stringstream ss;
ss << str1;
ss << str2;
ss << str3;
ss << str4;
我不想在stringstream中添加所有元素为零的数组,即只应添加str1,str2和str4,不应在流中添加str3。
此外,如果前导char数组只有零,我必须用(:)替换它们,比如IPv6地址:
2001:将0db8:0070:0040:0000:0000:0000:0000
2001:将0db8:0070:0040 ::
我该怎么办?
答案 0 :(得分:1)
您希望扫描字符串,如果找到'0'
以外的任何内容,则可以停止并将字符串附加到流中。如果你到达流的末尾,除了'0'
之外什么都没找到,你就什么也做不了。
void appendIfNotZero(stringstream &stream, char *str)
{
char *ptr = str;
// If *ptr == 0, we've reached the end of the string.
while(*ptr) {
// If *ptr != '0', the string is not all zeros, and we're done.
if(*ptr != '0') {
stream << str;
return;
}
// Otherwise, keep scanning the string.
ptr++;
}
}
...
appendIfNotZero(ss, "2001");
appendIfNotZero(ss, "677F");
appendIfNotZero(ss, "0000");
appendIfNotZero(ss, "4004");
答案 1 :(得分:1)
稍微简化哥德尔。
char str1[] = "2001";
stringstream buffer;
string item = str1;
if ( item != "0000" ){
buffer << item;
}
// same for str2-4.
将strN放在数组中可以进一步简化操作。