Как мне манипулировать импортированным .text файлом, чтобы на экране отображались только последние четыре цифры SNN сотрудника? - PullRequest
0 голосов
/ 05 мая 2011

Эта программа извлекает файл из лосьона на компьютер и выводит его на экран отображаются только последние четыре цифры 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;

   }
   /*

Файл был успешно открыт для чтения

Имя сотрудника: Гарри Хек 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, чтобы выйти): * /

1 Ответ

0 голосов
/ 05 мая 2011

Используйте регулярные выражения из стандартной библиотеки.

#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

Кроме того, в будущем вы, вероятно, получите более полезные ответы, если будете следовать рекомендациям сообщества по заданию домашних заданий.

...