首页 > 解决方案 > String.length() 显示不正确的值

问题描述

我正在 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)有关:字符串相似度

标签: c++string

解决方案


假设您正确描述了输入,即它是一个“单词”,那么问题不在您的代码中。问题必须在运行代码的环境中。它有某种机制可以将标准输入提供给您的程序。要么对总输入长度有限制,要么对行长度有限制。4 KB 是 4096 字节,因此您的输入可能受此限制:单词的 4095 个字符加上换行符(或终止 0 字节的字符串,或其他)。

如果您在浏览器中的某种 Web 界面下运行它,问题甚至可能是,网页中的输入字段有这个限制。

如果你需要深入研究这个,试着逐个字符地阅读,看看你得到了什么,有多少个字符和多少个换行符。还要检查cin.fail()cin.eof()和。对于问题代码,您应该期望 failbit 为 false,并且 eofbit 可能为 true 或 false,具体取决于输入的截断方式。cin.bad()cin.good()


推荐阅读