std :: stringstream输出与std :: string的工作方式不同

时间:2017-10-18 16:21:05

标签: c++ c++11 stringstream

我目前正在开发一个程序,我可以用文本文件(称为plaintext.txt)替换字母表和密钥文件,并在运行命令将它们混合在一起时创建密文。工作代码如下所示:

echo strwidth(getline('.'))

以上代码的输出将在

之下
echo strwidth(getline(3))   "Length of line 3
echo strwidth(getline('$')) "Length of the last line

但是,我想将我的“text”和“cipherAlphabet”转换为一个字符串,我通过不同的文本文件获取它们。

string text;
string cipherAlphabet;

string text = "hello";
string cipherAlphabet = "yhkqgvxfoluapwmtzecjdbsnri";

string cipherText;
string plainText;

bool encipherResult = Encipher(text, cipherAlphabet, cipherText);
bool decipherResult = Decipher(cipherText, cipherAlphabet, plainText);  

cout << cipherText;
cout << plainText;

但是,如果我这样做,我没有输出,没有错误?那里有人可以帮我这个吗?谢谢!!

1 个答案:

答案 0 :(得分:1)

std::ifstream u("plaintext.txt"); //getting content from plainfile.txt, string is text
std::stringstream plaintext;
plaintext << u.rdbuf();
text = plaintext.str(); //to get text

当您使用上面的代码行来提取text时,您在文件中也会获得任何空格字符 - 很可能是换行符。将该代码块简化为:

std::ifstream u("plaintext.txt");
u >> text;

需要进行相同的更改才能阅读密码。

如果您需要包含空格但排除换行符,请使用std::getline

std::ifstream u("plaintext.txt");
std::getline(u, text);

如果您需要处理多行文字,则需要稍微更改一下程序。