在文件中看到字符串时的c ++ fstream

c++ fstream when see string in file

我做了一个代码,但它没有work.Can你帮忙吗?在代码中,我想取一行,如果代码看到 //n,结束行。

这是我的例子。
文件:

I love C++! //n

我的代码:

ifstream file("file.txt");
char text[250];
while(file >> text){
  cout << text << " ";
  if(text == "//n"){
    cout << endl;
  } 
}

感谢您的帮助。

我不确定您要做什么,但您似乎想要获得一行文本。如果是这样,你会想改变

char  text[255];

....

if(text == "//n") 

std::string  text;

...

if(text == "\n")

数组比较不会比较字符串。所以使用 std::string 允许您使用 == 运算符。

因为 C++ 特殊字符代码使用反斜杠而不是两个正斜杠。

但是,我还建议使用单个字符而不是数组(因为索引似乎不是问题,因为您只访问其中的第一个字符)。

如果您想一次读取一个文件:

ifstream file("file.txt");

std::string line;
while(std::getline(file, line)) {
    std::stringstream linestream(line);

    std::string       word;
    while(linestream >> word) {
        std::cout << "Word: " << word << " ";
    }
    std::cout << "EOL\n";
}

基本上你的代码有几个问题。

  1. '//n' 不是特殊字符,我们都假设您指的是 '\n'。
  2. 大多数从文件中读取文本的运算符都会忽略“\n”字符。
    operator>> 会屏蔽白色 space (包括 \n).
    getline() 读取该行但删除 \n。
    因此 '\n' 永远不会出现在要比较的文本中。
  3. 数组 char text[255] 很容易将自己转换为指针。
    因此,您正在进行的比较是比较两个指针。这永远不会相等。
    您需要一种可以使用 == 做一些聪明的事情的类型,以便您比较文本。
    为此你应该使用 std::string.

作为一个很好的风格指南。

永远不要在代码中加入 using namespace std;。当您只有一点简单的一次性代码时,它会造成更多麻烦。在简单的一次性代码中使用它是一个坏习惯,总有一天你会养成的。

std(以及其他)很短而不是 standard 的原因是,从标准库中为它添加前缀并不麻烦。

std::cout << text << " "; // not hard.
std::cout << std::endl;

没有真正的理由使用std::endl(我想调试是个例外)。在正常情况下,它添加的额外冲洗通常会导致输出明显减慢。所以更喜欢使用 '\n' 除非你特别想强制刷新。

这里的问题是,您的代码比较指针,而不是比较字符串(如其他答案中所述):

if(text == "//n")
{
    ...
}

这里的text是一个指针(其实就是char的数组,但是在这个上下文中相当于一个指针),"//n"也是一个指针(也是一个大批)。比较两个指针不是你想要的。

要修复您的代码以便比较字符串,您的代码比较的对象之一应该是字符串而不是指针。要将 "//n" 标记为字符串,请将 s 附加到它:

if(text == "//n"s)
{
    ...
}

这有点晦涩;另一种解决方案是使 text 成为一个字符串(如其他答案中所述):

std::string text;