我正在尝试编写一个控制台实用程序来维护.txt格式的法庭日期列表,以便我可以更好,更轻松地跟踪它们。为此,我开始使用我喜欢的一段代码作为模板,然后向上工作。
我遇到的问题是实现一个遍历整个文件的搜索功能,并列出所有找到的字符串出现(即以DDMMYY格式存储的日历类型日期)。
对不起,如果我的编码远远不能被接受,但请记住,我只是一个充满电脑热情的律师! :)
这里没有进一步的jib-jabbing是有问题的代码:
#include "stdafx.h"
using namespace std;
void name();
void ID();
int main()
{
system("cls");
system("color 0F");
int ch1;
cout << "1 pentru a introduce un termen nou" << endl;
cout << "2 pentru a cauta o data" << endl;
cin >> ch1;
if (ch1 == 1)
{
name();
}
else if (ch1 == 2)
{
ID();
}
}
void name()
{
system("cls");
string name, salary;
ofstream worker("termene.txt", ios::app);
int ID;
cout << "Termen la instanta : ";
cin >> name;
cout << "Data termenului format ZZLLAA : ";
cin >> ID;
cout << "Client : ";
cin >> salary;
worker << name << " " << ID << " " << salary << endl;
worker.close();
cin.get();
main();
}
void ID()
{
ifstream worker("termene.txt");
string name, salary, ID;
unsigned int curLine = 0;
string search;
cout << "Introdu data format ZZLLAA : ";
cin >> search;
string line, line2, line3;
if (worker.is_open())
{
while ((getline(worker, line)))
{
if (line.find(search, 0) != string::npos)
{
cout << "Termen: " << endl;
cout << line << endl;
if (line.find(search, 1) != string::npos)
{
getline(worker, line2);
cout << "Termen: " << endl;
cout << line2 << endl;
if (line.find(search, 2) != string::npos)
{
getline(worker, line3);
cout << "Termen :" << endl;
cout << line3 << endl;
}
}
else
{
system("cls");
cout << "Bad command or court date." << endl;
}
}
worker.close();
}
system("pause");
main();
}
}
答案 0 :(得分:1)
致电main()
看起来不是一个好主意。它可能会创建一个无限循环,它将消耗函数调用堆栈。这里的增长受到转义标准输入的限制,但它仍然会超载并且可能会溢出调用堆栈。不好的做法,避免它。在while
内创建main()
循环。
以下代码将阻止调用堆栈溢出:
int main() {
while(true) {
// Branch your code
}
return 0;
}
然后,每次在while
循环内调用函数时,函数退出时都会释放调用堆栈。因此堆栈不会永远增长,您可以避免堆栈溢出。顺便说一句,提供退出条件而不是创建无限循环更好。
答案 1 :(得分:0)
为什么不使用fgrep?当然这只适用于Unix。
fgrep命令:
fgrep命令用于在一个或多个文件中搜索匹配的行 给定的字符串或单词。 fgrep比grep搜索更快,但更少 灵活:它只能找到固定的文本,而不是正则表达式。
我认为您也可以使用UnixUtils在Windows上获取一些命令。