在分隔符之间获取字符串
Getting string in between delimiters
大家好,
我在分解字符串("剪切"和使用分隔符之间的部分字符串)时遇到问题。
到目前为止,这就是我设法做到的:
std::string begin_processed_received_DATA = "&7?@670*/5#^";
std::string end_processed_received_DATA = "*8d4a#%";
processed_received_DATA = receive_DATA;
//Checks if delimiter exists in message (by setting NO_DELIMITER to represent number where END DELMITER is in string array)
std::size_t NO_DELIMITER = processed_received_DATA.find(end_processed_received_DATA);
if (NO_DELIMITER != std::string::npos) {
//Deletes string from end
processed_received_DATA.resize(processed_received_DATA.find(end_processed_received_DATA));
//Deletes string from begining (starting at string[0])
processed_received_DATA.erase(0, processed_received_DATA.find(begin_processed_received_DATA) + begin_processed_received_DATA.size());
}
else {
return 201502;
}
有没有人知道我应该如何处理这个问题?
示例receive_DATA
是这样的:984GE#$% 534'694 4685)_(9357uf0 di,stre89/4&7?@670*/5#^nulter.dd/se 895/68.476*8d4a#%897 R#3t746+- @1
我必须通知我的receive_DATA
字符串由许多符号、数字、空格、字母组成,长度约为 20000 个符号。这是图片,以了解它是哪种字符串。(我记得以类似的方式用更短的字符串解决了这个问题)
std::string find_delimited(const std::string& data,
const std::string& begin_delimiter,
const std::string& end_delimiter) {
std::size_t begin = data.find(begin_delimiter);
if (begin == std::string::npos)
// error: begin_delimiter not found
begin += begin_delimiter.size();
std::size_t end = data.find(end_delimiter, start;
if (end == std::string::npos)
// error: end_delimiter not found
return data.substr(begin, end - begin);
}
您可以使用标准string
类的find()
方法。正如您可以在此处阅读的更多信息,此方法返回字符串中子字符串的第一个索引。
我假设receive_DATA
是一个std::string
,因为它没有在您的代码示例中显式声明。
您要做的是从查找分隔符的位置开始,如下所示:
size_t dataBegin = receive_DATA.find(begin_proccessed_received_DATA) +
begin_proccessed_received_DATA.length();
string dataAfterFirstDelim;
size_t dataEnd;
if (dataBegin != string::npos)
{
dataAfterFirstDelim = receive_DATA.substr(dataBegin,
receive_DATA.length() - dataBegin);
dataEnd = dataAfterFirstDelim.find(end_proccessed_received_DATA);
}
请注意,您必须将第一个分隔符的长度添加到该分隔符的起始位置,才能找到数据的开头。从那里,您只需要在数据开头(如@SergeBallesta所指出)之后搜索第二个分隔符。
当您知道它们在字符串中出现的位置时,您可以使用 substr 方法轻松找到它们之间的子字符串,该方法采用起始位置和长度。由于您现在有一个从数据开始的字符串,因此您可以从数据的开始到数据的结束点执行子字符串。
if (dataBegin != string::npos && dataEnd != string::npos)
{
processed_received_DATA = dataAfterFirstDelim.substr(0, dataEnd);
}
相关文章:
- 从C字符串中获取奇怪的字符串长度
- 获取字符串的长度并将其分配给数组
- 我如何获取从 C++ 到 C 的映射<字符串、int>#
- 调用CreateProcess()并获取字符串的返回值
- 从字符串中获取结构的大小
- Cryptopp:获取密码输入的填充字符串
- 获取无效的字符串大小
- 获取 OID(类型::b_oid)作为 MongoDB C++驱动程序中的字符串
- C ++编译器如何获取argv字符串的长度
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 如何使用字符串获取用户控制台输入
- 通过字符串获取小部件
- 无法从字符串获取数字输入
- 在C++的静态方法中将类名作为字符串获取
- 从设备实例路径字符串获取设备实例 DWORD
- HRESULT到字符串(获取文档路径)C++
- 如何从http请求体字符串获取文件名
- 如何使用带有垃圾字符的子字符串获取字符串
- 通过字符串获取对话框项的可能性
- 有没有办法将 WinAPI 错误标志作为字符串获取