簡體   English   中英

將具有定界符的字符串拆分為3個變量

[英]Splitting a string that has delimiters into 3 variables

我創建了此代碼,將一個字符串分成3個不同的字符串str_days,str_column和str_time。 我想知道是否有更好的方法將其分為3個變量。 可能只使用1個if語句?

string::size_type pos = combinedString.find(';');
if (combinedString.npos != pos) {
    combined2 = combinedString.substr(pos + 1);
    str_days = combinedString.substr(0, pos);
}
string::size_type pos2 = combined2.find(';');
if (combined2.npos != pos2) {
    str_column = combined2.substr(pos2 + 1);
    str_time = combined2.substr(0, pos2);
}

如果適合,您可以將可變的細節包裝在可變函數后面:

#include <string>
#include <algorithm>

template <typename Iterator, typename Delimiter>
bool split_into(Iterator begin, Iterator end, Delimiter, std::string & first)
{
    first.assign(begin, end);
    return true;
}

template <typename Iterator, typename Delimiter, typename... Strings>
bool split_into(Iterator begin, Iterator end, Delimiter d, std::string & first, Strings & ... strings)
{
    auto i = std::find(begin, end, d);

    first.assign(begin, i);

    if (i != end) {
        return split_into(++i, end, d, strings...);
    }

    return sizeof...(Strings) == 0;
}

然后像這樣調用:

std::string combinedString("foo;bar;baz;widget");
std::string a, b, c;

split_into(combinedString.begin(), combinedString.end(), ';', a, b, c);

// a == "foo"
// b == "bar"
// c == "baz;widget"

如果遇到的分隔符不足以填充所有傳遞的參數,則split_into()將返回false。

現場演示

您可以將std::istringstreamstd::getline() ,並指定';' 作為行定界符,例如:

#include <string>
#include <sstream>

std::string combinedString = ...;
std::string str_days, str_time, str_column;

std::istringstream iss(combinedString);
std::getline(iss, str_days, ';');
std::getline(iss, str_time, ';');
std::getline(iss, str_column);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM