0

该程序从计算机上的某个位置检索文件并将其打印到仅显示员工 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 reading\n"
       << 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;

   }
   /*

文件已成功打开读取

员工姓名:Harry Heck 员工 SSN:987-98-7987(除最后四个之外的所有内容都需要为“x”或空白) 员工时薪:20.15 美元 本周工作小时数:40.25 总工资:811.04 美元

员工姓名:Sally Smothers 员工 SSN:654-65-4654(除最后四个之外的所有内容都需要为“x”或空白) 员工时薪:50.25 美元 本周工作小时数:40.35 总工资:2027.59 美元

感谢您的宝贵时间(0 退出):*/

4

1 回答 1

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

此外,在未来,如果您遵循社区指南提出家庭作业问题,您可能会得到更多有用的答案。

于 2011-05-05T04:39:54.503 回答