0

私はこの機能を持っています。

void cast(char *buf)
{
    string str(buf);
    string  s=str.substr(0,5);
    std::transform(s.begin(), s.end(), s.begin(),::toupper);
    DemoInput=s;
}

* bufは、クライアントが送信するメッセージです。私はそのメッセージを受け取り、それがどれほど長くても5文字にストリップして大文字にしようとしています。これは、メッセージが5より大きい場合に機能しますが、メッセージが5より小さい場合は、最後にガベージ文字があります。例:bufが「long」の場合、DemoInputは「LONG\\r」になります

正規表現( "[:upper:]")を使用することを考えましたが、これを行うにはもっと簡単な方法があるはずだと思います。たとえば、posix正規表現はpython正規表現よりも少し複雑だと思います。

4

2 に答える 2

2

最初の 5 文字だけが必要な場合は、全体をコピーしないでくださいbuf。それはスペースと時間を無駄にするだけです。また、telnet 制御文字以降はコピーしないでください\r

void cast(char *buf)
{
    size_t len = 0;
    while (len < 5 && buf[len] != '\0' && buf[len] != '\r') {
        ++len;
    }
    string s(buf, len);
    std::transform(s.begin(), s.end(), s.begin(),::toupper);
    DemoInput=s;
}
于 2012-10-27T13:12:02.450 に答える
1

キャスト関数に buf を提供するコードを変更しないでください。'\0' を追加して、文字列の終わりを意味しますが、null で終了しない場合があります。

于 2012-10-27T13:10:06.540 に答える