gpt4 book ai didi

c++ - 如何对 vector 中的字符串进行模式匹配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:57 25 4
gpt4 key购买 nike

我有一个 vector 中的数据,我需要查看它的第三个元素 vrecord[2] 中是否包含“买入”或“卖出”一词

在 vector 中查找字符串出现的最直接方法是什么?

数据:

198397685
2014-11-14 15:10:13
Buy
0.00517290
0.00100000
0.00100000
0.00000517
198398295
2014-11-14 15:11:14
Buy
0.00517290
0.00100000
0.00100000
0.00000517
203440061
2014-11-21 16:13:13
Sell
0.00825550
0.00100000
0.00100000
0.00000826

代码:

    vector<std::string> vrecords;
while(std::fgets(buff, sizeof buff, fp) != NULL){
vrecords.push_back(buff);
}

for(int t = 0; t < vrecords.size(); ++t){
cout << vrecords[t] << " ";
}

最佳答案

首先,在 C++ 中使用 C i/o 系统是个坏主意。最好使用 C++ 函数 std::getline或成员函数 getline和/或 getstd::basic_istream .

考虑到 C 函数 fgets还将换行符存储在字符串中。你应该删除它。例如

while ( std::fgets( buff, sizeof buff, fp ) != NULL )
{
size_t n = std::strlen( buff );
if ( n && buff[n-1] == '\n' ) buff[n-1] = '\0';
if ( buff[0] != '\0' ) vrecords.push_back( buff );
}

如果 vector 声明为 std::vector<std::string> (我希望它没有被声明为例如 std::vector<char *> )那么你可以改写

std::string record;
while ( std::getline( YourFileStream, record ) )
{
if ( !record.empty() ) vrecords.push_back( record );
}

在这种情况下,使用标准算法查找单词“Buy”很简单 std::find在 header 中声明 <algorithm> .例如

#include <algorithm>
#include <iterator>

//...

auto it = std::find( vrecords.begin(), vrecords.end(), "Buy" );

if ( it != vrecords.end() )
{
std::cout << "Word \"" << "Buy"
<< "\" is found at position "
<< std::distance( vrecords.begin(), it )
<< std::endl;
}

如果您需要查找以下任何词“买入”或“卖出”,那么您可以使用标准算法 std::find_first_of .例如

#include <algorithm>
#include <iterator>

//...

const char * s[] = { "Buy", "Sell" };

auto it = std::find_first_of( vrecords.begin(), vrecords.end(),
std::begin( s ), std::end( s ) );

if ( it != vrecords.end() )
{
std::cout << "One of the words \"" << "Buy and Sell"
<< "\" is found at position "
<< std::distance( vrecords.begin(), it )
<< std::endl;
}

如果您需要计算 vector 中有多少这样的词,那么您可以在循环中使用上述方法或使用标准算法 std::count , std::count_if , std::accumulate或基于范围的 for 循环。 例如

const char * s[] = { "Buy", "Sell" };

auto n = std::count_if( vrecords.begin(), vrecords.end(),
[&]( const std::string &record )
{
return record == s[0] || record == s[1];
} );

关于c++ - 如何对 vector 中的字符串进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27075707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com