![](/img/trans.png)
[英]Splitting strings separated by \r\n into array of strings [C/C++]
[英]C++ Splitting array of strings into subgroups
我有一個字符串數組(長度總是不同),我需要將它分成幾組(有時數字也不同);
int main()
{
// Array that I want to split;
void Names = { Sara, Kaya, Hya, Jenny, Mary, Tiffany, Stefan };
int groupNumber = 3;
//Now I would like to split the names into 3 different groups as evenly as
//possibile so that I can print
// Group 1 : Sara,Hya,Jenny;
//Group 2 : Kaya,Mary;
//Group 3 : Tiffany, Stefan;
}
這是一個將數組拆分為多個組的示例代碼。 我希望它有助於開始。
int groupNumber = 3;
std::vector<std::string> names = { "Sara", "Kaya", "Hya", "Jenny", "Mary", "Tiffany", "Stefan" };
std::vector<std::vector<std::string>> groups;
groups.resize(groupNumber);
for (int i= 0; i < names.size(); ++i)
{
groups.at(i % groupNumber).push_back(names.at(i));
}
您可以使用此循環打印出組。
for (auto group : groups)
{
for (auto name : group)
{
std::cout << name << " , ";
}
std::cout << std::endl;
}
#include <iostream>
#include <array>
#include <vector>
using std::cout;
template <typename T>
std::ostream& operator <<(std::ostream& stream, const std::vector<T>& vec) {
stream << "{";
for (auto it = vec.begin(); it != vec.end(); ++it) {
if (it != vec.begin()) stream << ", ";
stream << *it;
}
stream << "}";
return stream;
}
template <size_t GroupN, typename T> // T can be deduced
std::array<std::vector<T>, GroupN> split_vector(std::vector<T> vec_to_split) {
std::array<std::vector<T>, GroupN> result;
size_t remaining = vec_to_split.size();
size_t optimal_size;
for (size_t i = 0; i < GroupN; ++i) {
optimal_size = (remaining + GroupN - i - 1) / (GroupN - i);
// ceiling division, 7/3->3, 4/2->2, 2/1->2
result[i].reserve(optimal_size);
for (size_t j = vec_to_split.size() - remaining; j < vec_to_split.size() - remaining + optimal_size; ++j)
result[i].push_back(vec_to_split[j]);
remaining -= optimal_size; // 7-3=4, 4-2=2, 2-2=0
}
return result;
}
int main() {
std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
auto [v1, v2, v3] = split_vector<3>(v); // Structured binding, C++17 or above only
cout << v1 << ", " << v2 << ", " << v3 << "\n";
return 0;
}
頂部 function 只是std::vector
的漂亮打印機,因為它們默認不可打印。 我使用int
而不是std::string
,但這沒關系,
主 function 返回一個數組,因此它的大小在編譯時作為模板參數給出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.