i007.vip

i007.vip

优先队列-降维打击

04.算法训练

手撕两个字符串切分函数

std::vector<std::string> split(const std::string& s, char c) {
    std::vector<std::string> result;
    auto start = s.find_first_not_of(c, 0);
    while (start != std::string::npos) {
        auto end = s.find_first_of(c, start + 1);
        if (end == std::string::npos) {
            result.push_back(s.sub_string(start));
            break;
        } else {
            result.push_back(s.sub_string(start, end - start));
            start = s.find_first_not_of(c, end + 1);
        }
    }
    return result;
}

std::vector<std::string> parse(const std::string& s, char c) {
    std::vector<std::string> result;
    size_t start = 0;
    
    while (start < s.size()) {
        size_t end = s.find_first_of(c, start);
        if (end == std::string::npos) {
            result.push_back(s.sub_string(start));
            break;
        } else {
            result.push_back(s.sub_string(start, end - start));
            start = end + 1;
        }
    }

    if (start == s.size()) {
        result.push_back(std::string());
    }
    return result;
}

字符串切分主要分两种情况,空格切分和逗号切分,在空格切分中,连续的空格算作同一个分隔符,在逗号切分中,连续的逗号算作不同的切分符,结果是空格切分的结果中不包含空字符串,但是逗号切分的结果中可能会包含空字符串。

发表回复