我已经阅读了文本文件中的行,我想检查该行是否包含$符号。
这就是我到目前为止所得到的:
int main() {
ifstream data_store;
string line;
data_store.open("c:\\test.txt");
while (!data_store.eof())
{
getline(data_store, line);
if (line.find("$"))
cout << "1: " << line << endl;
}
data_store.close();
system("PAUSE");
return 0;
}
此外,我如何将它们输出到文件?
答案 0 :(得分:2)
要检查某行是否包含使用std::string::find
的内容,需要检查来自find
的返回值,以确保它是有效的返回值。为此,我们将其与std::string::npos
进行比较,因为find()
如果找不到任何内容将会返回std::string::npos
。这就是当它被评估为bool
时,它发现while (getline(data_store, line))
{
if (line.find("$") != std::string::npos)
cout << "1: " << line << endl;
}
的每一行仍然被认为是真的原因。因此,重构您的代码:
eof
我也改变了while循环,因为使用@Service
public class MessageService
@Entity
public class Message
不是如何控制while循环。有关详细信息,请参阅Why is “while ( !feof (file) )” always wrong?
只要将字符串输出到文件,请参阅:How to write std::string to file?
答案 1 :(得分:0)
这是一个小问题,但是@ NathanOliver解决方案的变体是使用for
循环:
ifstream data_store("c:\\test.txt");
for ( string line; getline(data_store, line); ) {
if ( line.find("$") != string::npos )
cout << "1: " << line << endl;
}
// ...
这里的好处是line
现在只对循环本地化,这应该是它应该是的,因为它是唯一使用它的地方。
答案 2 :(得分:0)
我昨天忘了更新了。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool contains_number(const string &c);
int main()
{
int count = 0;
{
string line1[100];
ifstream myfile("D:/Users/Jarvan/Desktop/test.txt");
int a = 0;
if (!myfile)
{
cout << "Error opening output file" << endl;
system("pause");
return -1;
}
while (!myfile.eof())
{
getline(myfile, line1[a], '\n');
if (contains_number(line1[a]))
{
count += 1;
cout << line1[a] << "\n";
}
else cout << "\n";
}
}
cout << count <<endl;
system("pause");
return 0;
}
bool contains_number(const string &c)
{
return (c.find_first_of("$") != string::npos);
}