有人可以給我一些提示什麼是從可變長度輸入字符串中提取參數名稱和參數值的最佳/優雅方法?我需要提取這些值才能將它們寫入另一個.txt文件。我應該使用正則表達式嗎?什麼是使用它們的方式?解析字符串給出:#parameter1〜value1#parameter2〜value2#parameter3
我知道如何做到這一點,但使用循環和各種if-then條件,這是一團糟。我需要的是在哪裏尋找可以幫助我的一些內置函數。
謝謝!
有人可以給我一些提示什麼是從可變長度輸入字符串中提取參數名稱和參數值的最佳/優雅方法?我需要提取這些值才能將它們寫入另一個.txt文件。我應該使用正則表達式嗎?什麼是使用它們的方式?解析字符串給出:#parameter1〜value1#parameter2〜value2#parameter3
我知道如何做到這一點,但使用循環和各種if-then條件,這是一團糟。我需要的是在哪裏尋找可以幫助我的一些內置函數。
謝謝!
正則表達式在這種情況下是不必要的開銷。一個字符std::string::find
就足以完成這項工作。假設每個參數(甚至是第一)開始#
,該值是可選的(默認爲""
)和後#
總是忽略你可以做一些事情如:
std::string pstr = ...; // the parameter string
typedef std::pair<std::string, std::string> Param;
std::vector<Param> params;
std::size_t pos = pstr.find('#');
std::size_t next = pstr.find('#', pos);
while (pos != std::string::npos) {
std::string param, value;
std::size_t sep_pos = pstr.find('~', next);
if (sep_pos != std::string::npos) {
value = pstr.substr(sep_pos + 1, next - sep_pos - 1);
param = pstr.substr(pos + 1, sep_pos - pos - 1);
} else {
param = pstr.substr(pos + 1, next - pos - 1);
}
params.push_back(Param(param, value));
}
注意,這std::strtok
是一個糟糕的建議。該函數是不安全的,不應該在正常的C++代碼中使用。
假設所存儲的初始文本如下:
param1:value1;param2:value2;param3:value3.....
最好的辦法是使用java
StringTokenizer
。 的代碼如下:
StringTokenizer sT=new StringTokenizer(InputString, ";");
while(sT.hasMoreTokens())
{
String Pair=sT.nextToken();
String sT2=new StringTokenizer(Pair, ":");
String param=sT2.nextToken();
String value=sT2.nextToken();
System.out.println(param+" "+value);
}
在另一方面,如果,你想在C++
嚴格代碼,那麼你可以使用C++計數器部分, strtok
功能。欲瞭解更多信息請見here
使用兩個分裂的一個#和一個〜每個結果 –