当给定字符串时,Cout在行开始时开始打印

时间:2017-05-18 10:51:32

标签: c++ string std cout flush

我在C ++中有一个字符串向量,名为lines

这一行

std::cout << "First line: >" << lines[0] << "<" << std::endl; 

打印“&gt;第一行:&gt; string_here”而不是“第一行:&gt; string_here&lt;”。

为什么cout在字符串后面的当前行开头打印,我该如何解决?我也尝试在每次cout后冲洗,但结果是一样的。

这是一个完整的代码,用于说明我的问题,在解决之前

#include <iostream>
#include <vector>
#include <string.h>

std::vector<std::string> parse(char *buffer, const char *delimiter) {
    std::string buff(buffer);
    size_t pos = 0;
    std::string part;
    std::vector<std::string> parts;
    while ((pos = buff.find(delimiter)) != std::string::npos) {
        part = buff.substr(0, pos);
        parts.push_back(part);
        buff.erase(0, pos + 1);
    }

    parts.push_back(buff);

    return parts;
}

int main() {
    char *s;
    s = strdup("Many lines\r\nOf text");

    std::cout << s << std::endl;  // this should print the string how it is

    std::vector<std::string> lines;
    lines = parse(s, "\n");  // parsing the string, after "\n" delimiter
    // that was the problem, I should have parsed after "\r\n"

    std::cout << "First line: >"<< lines[0] << "<" << std::endl;  // output
}

1 个答案:

答案 0 :(得分:2)

如果没有lines[0]的完整内容,我们无法确定,但我的(受过教育的)猜测是lines[0]\r结尾,回车符,所以一切都打印完毕lines[0]打印在行的开头。