while循环退出后,字符串的内容将被删除?

时间:2016-09-24 00:50:36

标签: c++ string while-loop scope cout

嘿大家这是我的第一篇文章,所以如果我犯了任何错误,比如信息不足等,请告诉我,这样我就不会再犯错了。

所以我的问题是我需要获取文件的内容然后将它们输入到我正在工作的字符串中。但是,在while循环结束后,如果我尝试在while循环外使用该字符串并操纵字符串的内容。字符串是空白的,似乎没有内容。我通过使用std :: cout行来确定这一点。我认为这是一个范围问题,但我不知道如何解决它。以下是与该问题相关的代码,我们将非常感谢任何提示或帮助!

 std::string str;
 std::ifstream file;

 while(!file.eof()){
 getline(file, str);
 std::cout << str << "";

 }

 file.close();

 std::cout << str << "";

 std::map<std::string, int> map;

 for(int i = 0; i < str.length(); ++i){

   std::string sub = str.substr(i, k);

   std::cout << sub << std::endl;

   map.insert(make_pair(sub, 1));

   }

  std::cout << "" << std::endl;

另外,我正在尝试将字符串切割成大小为k,这是在代码的不同部分中定义的变量,所以我在C ++中使用了substr方法,我相信这是有效的,因为当我把它放入while循环我可以打印出文件的内容,但格式是关闭的,我认为这是因为while循环运行的性质,但我不确定,如果我错了或有任何误解,请纠正我

2 个答案:

答案 0 :(得分:1)

您只使用getline(file, str);一次存储一行。我的猜测是文件的最后一行是空白的,因此存储到str的最后一行是空白的。

您可以连接而不是覆盖:

std::string temp;
std::string str;
std::ifstream file;

while(!file.eof()){
    getline(file, temp);
    std::cout << str << "";
    str = str + temp;
}

或者,添加#include <fstream>并使用:

std::ifstream inputStream("myfile.txt");
std::string str((std::istreambuf_iterator<char>(inputStream), 
                (std::istreambuf_iterator<char>()));

答案 1 :(得分:1)

将文本文件存储到std::vector然后选择您想要操作的句子会更容易吗? 例如:

int main()
{
    std::string str;
    std::ifstream file{ "file.txt" };
    std::vector<std::string> vec;

    // Store text file in vector
    while (std::getline(file, str)) {
        vec.emplace_back(str);
    }

    // Print out line 2:
    std::cout << vec.at(1) << '\n';

    // Reverse line 2 and print:
    std::string line2 { vec.at(1) };
    std::reverse(begin(line2), end(line2));
    std::cout << line2 << '\n';
}