首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++通过引用传递矢量字符指针

C++通过引用传递矢量字符指针
EN

Stack Overflow用户
提问于 2012-02-25 00:44:16
回答 3查看 717关注 0票数 1

大家好,我遇到了下面的问题,我需要从一个文件构建一个向量数组。我设法创建了一个向量,方法是将文件读取到字符串缓冲区中,然后将其保存到下面的向量中。

代码语言:javascript
复制
vector<char> pattern(contents.begin(), contents.end());

但是我有下面的函数,我需要将向量传递给它。

代码语言:javascript
复制
void WuManber::Initialize( const vector<const char *> &patterns, 
                      bool bCaseSensitive, bool bIncludeSpecialCharacters, bool bIncludeExtendedAscii )

如何从文件中读取此函数的可传递向量。谢谢你的帮助。

为了更详细地阐述,我需要它做以下工作

代码语言:javascript
复制
for ( size_t q = m; q >= B; --q ) 
  { // start loop -8-

  unsigned int hash;
  hash  = m_lu[patterns[j][q - 2 - 1]].offset; // bring in offsets of X in pattern j
  hash <<= m_nBitsInShift;
  hash += m_lu[patterns[j][q - 1 - 1]].offset;
  hash <<= m_nBitsInShift;
  hash += m_lu[patterns[j][q     - 1]].offset;
  size_t shiftlen = m - q;
  m_ShiftTable[ hash ] = min( m_ShiftTable[ hash ], shiftlen );
  if ( 0 == shiftlen ) 
 {  // start if -8-
    m_PatternMapElement.ix = j;
    m_PatternMapElement.PrefixHash = m_lu[patterns[j][0]].offset;
    m_PatternMapElement.PrefixHash <<= m_nBitsInShift;
    m_PatternMapElement.PrefixHash += m_lu[patterns[j][1]].offset;
    m_vPatternMap[ hash ].push_back( m_PatternMapElement );
  } // end if -8-

int main(int argc, char* argv[])
{
if (argc < 2) {
  std::cout << "usage: " << argv[0] << " <filename>\n";
  return 2;
 }

 ifstream fin(argv[1]);
 if (fin) {
  stringstream ss;
  // this copies the entire contents of the file into the string stream
  ss << fin.rdbuf();
  // get the string out of the string stream
  string contents = ss.str();
  cout << contents;
  // construct the vector from the string.
  vector<char> pattern(contents.begin(), contents.end());
  Initialize( &pattern);
  cout << pattern.size();
 }
 else {
  cout << "Couldn't open " << argv[1] << "\n";
  return 1;
 }
 return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-25 00:48:45

该函数正在查找C字符串的vector (这是const char *在名为patterns的容器中最可能的含义。

下面是如何构建一个应用程序:

代码语言:javascript
复制
std::vector<const char*> patterns;
patterns.push_back("my-first-pattern");
patterns.push_back("my-second-pattern");

如果您或您的团队设计了此函数,您可能希望建议将容器类型更改为更具C++风格的vector<string>

如果您正在从文件中读取您的模式,则可以按如下方式填充数组:

编辑(对评论的响应)

代码语言:javascript
复制
std::ifstream ifs("file_with_patterns.txt");
std::vector<const char*> patterns;
while (!ifs.eof()) {
    std::string buf;
    std::getline(ifs, buf);
    patterns.push_back(strdup(buf.c_str()));
}
票数 2
EN

Stack Overflow用户

发布于 2012-02-25 00:47:48

如果contents是一个std::string,您可以将指向string数据的指针存储在一个向量中,并将其传递给函数:

代码语言:javascript
复制
vector<const char*> patterns;
patterns.push_back(contents.c_str());

// then pass patterns to Initialise

Initialise(patterns, bool, bool, bool);

// make sure you do not try to use `patterns` after you have changed `contents`
票数 1
EN

Stack Overflow用户

发布于 2012-02-25 00:48:25

我不确定,但也许代替void,让它成为一个向量并返回修改后的向量?

代码语言:javascript
复制
vector<char> WuManber::Initialize(const vector<const char *> &patterns, bool bCaseSensitive, bool bIncludeSpecialCharacters, bool bIncludeExtendedAscii ) 
{
 //vector manupilations
 return patterns;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9434633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档