String.length()显示不正确的值

时间:2019-06-15 14:06:01

标签: c++ string

我正在cpp中尝试以下代码

#include <iostream>
#include <string>
void Strlength(const string& s) {
    cout << s.length() << endl;
}
int main() {
    string s;
    cin >> s;
    cout << s.length() << endl;
    Strlength(s);
    return 0;
}

我输入的字符串长100,000个字符,就像"xxxxxxx...xxxxabcde" (用其余的x填充...)

这使我的输出为

4095
4095

我期望输出为100000。我在做什么错了?

这与hackerrank问题(测试案例10)之一有关:String Similarity

1 个答案:

答案 0 :(得分:0)

假设您正确地描述了输入,即它是一个“单词”,那么问题就不在您的代码中。问题必须出在运行代码的环境中。它具有某种将标准输入馈送到程序的机制。在总输入长度上有限制,或者在行长上有限制。 4 KB为4096字节,所以也许您的输入受到以下限制:单词4095个字符加上一个换行符(或终止字符串的0个字节,等等)。

如果您是在浏览器的某种Web界面下运行此程序,则问题甚至可能在于网页中的输入字段具有该限制。

如果需要对此进行深入研究,请尝试按char读取char并查看得到的内容,多少个char和多少个换行符。还要检查cin.fail()cin.eof()cin.bad()cin.good()。对于问题代码,您应该期望failbit为false,而eofbit可能为true或false,这取决于输入被截断的方式。

相关问题