该程序从计算机上的位置检索文件并将其打印到屏幕上仅显示员工 SSN 的最后四位数字。
#include <iostream>
#include <fstream>
#include <cstdlib> // needed for exit()
#include <string>
using namespace std;
int main()
{
double Thanks_for_your_time;
string filename = "C:\Emp\employee_info.txt";
string line;
ifstream inFile;
inFile.open("C:\Emp\employee_info.txt"); // open the file with the
// external name
if (inFile.fail()) // check for a successful open
{
cout << "nThe file was not successfully opened"
<< "n Please check that the file currently exists."
<< endl;
exit(1);
}
cout << "nThe file has been successfully opened for readingn"
<< endl;
while (getline(inFile,line))
cout << line << endl;
// statements to read data from the file would be placed here
do
{
cout << "nThanks for your time(0 to quit):";
cin >> Thanks_for_your_time;
}
/*
文件已成功打开读取
员工姓名:哈里·赫克员工 SSN:987-98-7987(除最后四个之外的所有内容都需要是"x"或空白)员工时薪:20.15 美元本周工作小时数: 40.25总工资: $811.04
员工姓名: 莎莉·斯莫斯员工 SSN:654-65-4654(除最后四个之外的所有内容都需要是"x"或空白)员工时薪:$ 50.25本周工作小时数: 40.35总工资: $2027.59
感谢您的时间(0退出):*/
使用标准库中的正则表达式。
#include <regex>
using namespace std::tr1;
我已经很多年没有玩过C++了,但它会是这样的(假设您将字符串存储在变量"str"中):
std::tr1::regex rx("[0-9]..-..-");
std::string replacement = "***-**-";
std::string str2 = std::tr1::regex_search(str, rx, replacement);
上面的代码是从这个网站引用的,你可以用这个很棒的工具测试你的正则表达式。我相当确定你想要regex_search而不是regex_replace,因为C++处理比赛的方式略有不同,但同样,我已经有一段时间没有使用C++了,所以我不能肯定地说。
请注意,"[0-9].-..-" 是一个正则表达式,它将匹配任何数字字符,后跟任何类型的两个字符(. 是通配符),然后是 -,然后是任何类型的另外两个字符,然后是另一个 -。因此,在您的文本中,它只会匹配两个 SSN 的前两个部分。然后,您将该匹配模式中的数字替换为星号。
另外,由于这是家庭作业,我想给你一些额外的资源,第一个是特定于语言的:
http://softwareramblings.com/2008/07/regular-expressions-in-c.html
http://www.regular-expressions.info/reference.html
http://www.zytrax.com/tech/web/regex.htm
此外,将来,如果您遵循社区指南来询问家庭作业问题,您可能会得到更有用的答案。