1

私は文字列ストリームを持っており、次のように8つの文字配列を持っています:

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;

すべての要素がゼロである文字列ストリームに配列を追加したくありません。つまり、str1、str2、および str4 のみを追加する必要があります。str3 はストリームに追加しないでください。

また、先頭の char 配列にゼロしかない場合は、IPv6 アドレスのようなもの (:) に置き換える必要があります。

2001:0db8:0070:0040:0000:0000:0000:0000

2001:0db8:0070:0040::

どうすればいいですか?

4

2 に答える 2

1

文字列をスキャンして、 a 以外のものが見つかった場合は'0'、停止して文字列をストリームに追加できます。ストリームの終わりに到達し、'0's しか見つからなかった場合は、何もしません。

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");
于 2013-11-08T14:33:49.983 に答える
1

ゲーデルを少し単純化します。

char str1[] = "2001";
stringstream buffer;
string item = str1; 
if ( item != "0000" ){
   buffer << item;
}
// same for str2-4.

strN を配列に入れると、さらに簡単になります。

于 2013-11-08T14:53:43.383 に答える