如何在C ++中使用部分文件名作为变量

时间:2015-01-27 23:54:52

标签: c++

我有几千个pcap文件,我试图解析作为研究项目的一部分。它们都被命名为xxx.xxx.xxx.xxx_yyy.yyy.yyy.yyy.pcap,其中第一个IP地址是我试图在我的C ++程序中用作变量的地址。

解析pcap文件本身不是问题。我将文件名作为指针传递给函数,只是不知道如何获取文件名的第一部分。

根据要求,这里有一些代码:

//program.cpp//
int main(int argc, char *argv[]){
  char * inFile;
  inFile = argv[1];

  result = parsePkts(inFile);
  return 0;
}

//functions.h//
int parsePkts(char *fn){
  struct ip *ipHdr = NULL;

  ipHdr = (struct ip *)(data + sizeof(struct ether_header));

  if((ipHdr -> ip_dst.s_addr)) == xxx.xxx.xxx.xxx) {
    do stuff
  }
}

显然,该计划还有很多,但这是我需要抓住它的地方。感谢。

1 个答案:

答案 0 :(得分:0)

如果你的输入是const char * as filename,你可以用几种方式拆分它。您写道,您需要将其拆分为某些部分(第一部分)。在你的情况下,我有一小部分用字符串来分割字符串' _'

void stringSplitBy(std::string str, const char *separator, std::vector<std::string> &results)
{
    size_t found = str.find_first_of(separator);
    while (found != std::string::npos) {
        if (found > 0) {
            results.push_back(str.substr(0, found));
        }
        str = str.substr(found + 1);
        found = str.find_first_of(separator);
    }
    if (str.length() > 0) {
        results.push_back(str);
    }
}

以这种方式使用它:

const char* inputfname = "xxx.xxx.xxx.xxx_yyy.yyy.yyy.yyy.pcap";
std::string fname = std::string(inputfname);
std::vector<std::string> results;
stringSplitBy(fname, '_', results);

您可以打印结果:

 std::vector<std::string>::iterator it = results.begin();
 for (; it != results.end(); ++it)
 {
   std::cout<< (*it).c_str() << std::endl;
 }