我有这个功能。
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正则表达式比python正则表达式更复杂。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
为什么不更改为演员函数提供buf的代码。追加&#39; \ 0&#39;尽管它可能不会被终止,但是表示字符串的结尾。