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,则其末尾有垃圾字符。例如:如果 buf 为“long”,则 DemoInput 变为“LONG\\r”

我考虑过使用正则表达式(“[:upper:]”),但认为必须有一种更简单的方法来做到这一点。例如,我发现 posix regex 比 python regex 更复杂一些。

4

2 回答 2

2

如果您只需要前 5 个字符,请不要复制整个buf. 那只是浪费空间和时间。此外,您不应复制 telnet control character 之后的任何内容\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 提供给 cast 函数的代码。附加 '\0' 以表示字符串的结尾,尽管它可能不是以空值结尾的。

于 2012-10-27T13:10:06.540 回答