0

このプログラムは、コンピューター上の場所からファイルを取得し、従業員のSSNの最後の4桁のみを表示する画面に印刷します。

#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(最後の4つを除くすべてが「x」または空白である必要があります)従業員の時給:$ 20.15今週の労働時間:40.25総賃金:$ 811.04

従業員名:Sally Smothers従業員SSN:654-65-4654(最後の4つを除くすべてが「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);

上記のコードはこのサイトから参照されたもので、この素晴らしいツールで正規表現をテストできます。C++ が一致を処理する方法がわずかに異なるため、regex_replace ではなく regex_search が必要であることは確かですが、繰り返しますが、しばらく C++ を使用していないため、確かなことは言えません。

「[0-9]..-..-」は、任意の数字の後に任意のタイプの 2 文字 (. はワイルドカード)、次に -、さらに任意のタイプの 2 文字が続く正規表現であることに注意してください。それから別の-。したがって、テキストでは、2 つの SSN の最初の 2 つのセグメントのみが一致します。次に、一致したパターンの数字をアスタリスクに置き換えます。

また、これは宿題なので、追加のリソースをいくつか提供したいと思います。最初は言語固有のものです。

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 に答える