从 std::string 中提取信息
Extract information from std::string
与字符串相关的查询太多,但仍然存在一些疑问,因为每个字符串都是不同的,每个要求也不同。
我有一个这种形式的字符串:Random1A:Random1B::String1 Random2A:Random2B::String2 ... RandomNA:RandomNB::StringN
我想以这种形式返回一个字符串:String1 String2 ... StringN
简而言之,输入字符串看起来像A:B::Val1 P:Q::Val2
,而o/p结果字符串看起来像"Val1
Val2
"。
PS:Randoms
和Strings
是小(可变)长度的字母数字字符串。
std::string GetCoreStr ( std::string inputStr, int & vSeqLen )
{
std::string seqStr;
std::string strNew;
seqStr = inputStr;
size_t firstFind = 0;
while ( !seqStr.empty() )
{
firstFind = inputStr.find("::");
size_t lastFind = (inputStr.find(" ") < inputStr.length())? inputStr.find(" ") : inputStr.length();
strNew += inputStr.substr(firstFind+2, lastFind-firstFind-1);
vSeqStr = inputStr.erase( 0, lastFind+1 );
}
vSeqLen = strNew.length();
return strNew;
}
我想找回一个字符串String1
String2
...StringN
.
我的代码有效,我得到了我选择的结果,但它不是最佳形式。我需要帮助来提高代码质量。
我最终用C-way做了这件事。
std::string GetCoreStr ( const std::string & inputStr )
{
std::string strNew;
for ( int i = 0; i < inputStr.length(); ++i )
{
if ( inputStr[i] == ':' && inputStr[i + 1] == ':' )
{
i += 2;
while ( ( inputStr[i] != ' ' && inputStr[i] != ' ' ) )
{
strNew += inputStr[i++];
}
if ( inputStr[i] == ' ' )
{
strNew += ' ';
}
}
}
return strNew;
}
我在决定如何调整偏移量时遇到困难。[...]
std::string getCoreString(std::string const& input)
{
std::string result;
// optional: avoid reallocations:
result.reserve(input.length());
// (we likely reserved too much – if you have some reliable hint how many
// input parts we have, you might subtract appropriate number)
size_t end = 0;
do
{
size_t begin = input.find("::", end);
// added check: double colon not found at all...
if(begin == std::string::npos)
break;
// single character variant is more efficient, if you need to find just such one:
end = std::min(input.find(' ', begin) + 1, input.length());
result.append(input.begin() + begin + 2, input.begin() + end);
}
while(end < input.length());
return result;
}
旁注:你不需要额外的"length"输出参数;它是多余的,因为返回的字符串包含相同的值......
相关文章:
- 如何设置一个范围来提取我想要获得的信息
- 有没有办法从字符串中提取某些信息?C++
- 从 std::string 中提取信息
- 接受多个输入(如 +、- 和平方数字)的计算器.从文本文件中提取信息
- 从包含unordered_maps的unordered_map中提取信息
- 程序未正确从文本文件中提取信息
- 从冒号分隔的文件中提取信息-C++
- 使用 BNF 语法提取信息
- 如何从一个文件中提取信息并将信息拆分为其他四个文件
- 正则表达式提升以提取信息
- 使用Qt从网站中提取信息
- 从DLL/头文件中提取信息
- 从冒号分隔.txt文件中提取信息,C++
- 正在从c++文件中提取信息
- 使用另一个C/Java程序从给定的c++ /Java程序中提取信息
- 从c++文件中读取和提取信息
- 从c++自制函数中提取信息
- 从文件中提取信息到映射中,需要覆盖重复的值
- 如何从QByteArray中组织或提取信息
- 如何从命令行提取信息