我正在查看一篇關于如何拆分字串的流行 StackOverflow 帖子。我發現這非常有用,但我想進行每個拆分并將其存盤在陣列或不同的字串變數中。這樣我就可以訪問:斯科特、老虎、蘑菇或失敗。以下是我的嘗試,但由于錯誤,我無法編譯:
無法在賦值中將 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' 轉換為 'char'
有誰知道這樣做的有效方法?
#include <bits/stdc .h>
using namespace std;
#include <stdio.h>
#include <string.h>
char str[10];
void setup(){
std::string s = "scott>=tiger>=mushroom>=fail";
std::string delimiter = ">=";
int arrayIndex = 0;
size_t pos = 0;
std::string token;
while ((pos = s.find(delimiter)) != std::string::npos) {
token = s.substr(0, pos);
std::cout << token << std::endl;
s.erase(0, pos delimiter.length());
str[arrayIndex ] = token;
}
std::cout << s << std::endl;
}
void loop(){
}
uj5u.com熱心網友回復:
str[]是單個chars 的陣列,但您試圖在其中存盤std::string物件,因此出現錯誤。將陣列更改為 holdstd::string而不是char. 然后考慮使用std::vector而不是固定陣列。
#include <iostream>
#include <string>
#include <vector>
std::vector<std::string> str;
void setup(){
std::string s = "scott>=tiger>=mushroom>=fail";
std::string delimiter = ">=";
size_t start = 0, pos;
std::string token;
while ((pos = s.find(delimiter, start)) != std::string::npos) {
token = s.substr(start, pos-start);
str.push_back(token);
start = pos delimiter.size();
}
if (start < s.size())
str.push_back(s.substr(start));
for(auto &elem : str)
std::cout << elem << std::endl;
}
在線演示
uj5u.com熱心網友回復:
嘗試這個:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Suites
#include <boost/test/unit_test.hpp>
#include <stdio.h>
#include <string>
#include <unordered_map>
class StringLabelAdapter
{
std::unordered_map<std::string, int> firstLabelFound;
public:
StringLabelAdapter(std::string& stringPassedIn, std::string& delimiter):firstLabelFound()
{
int arrayIndex = 0;
size_t delimiterPosition = 0, prevDelimiterPosition = 0;
while ((delimiterPosition = stringPassedIn.find( delimiter, prevDelimiterPosition)) != std::string::npos)
{
std::string token = stringPassedIn.substr(prevDelimiterPosition, delimiterPosition);
if (!Exists(token))
{
firstLabelFound[token] = prevDelimiterPosition 1;
}
prevDelimiterPosition = token.size() delimiter.size();
}
};
bool Exists(std::string& labelToCompare) { return firstLabelFound.find(labelToCompare) != firstLabelFound.end(); };
};
BOOST_AUTO_TEST_SUITE(TestStringLabelAdapterSuite)
BOOST_AUTO_TEST_CASE(TestStringLabelAdapter)
{
std::string stringPassedIn = "scott>=tiger>=mushroom>=fail";
std::string delimiter = ">=";
StringLabelAdapter test(stringPassedIn,delimiter);
std::string s("scott");
BOOST_CHECK(test.Exists(s));
}
BOOST_AUTO_TEST_SUITE_END()
如果您不想進行 boost 單元測驗,請洗掉 boost 標頭和 boost 套件并將其放在 main 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448823.html
上一篇:按字典順序對結構陣列進行排序
