std::vector<char*> Split(std::string input) {
std::vector<char*> ret;
std::istringstream f(input);
std::string s;
while (getline(f, s, ' ')) {
ret.push_back((char*)s.c_str());
}
return ret;
}
此函数用于获取字符串并将每个单词放入向量中。但是说我把ls -l
作为字符串。它应返回一个包含两个元素ls
和-l
的向量。而是返回带有两个元素-l
和l
的向量。有人可以帮我吗?
答案 0 :(得分:0)
您将在向量中存储指向字符串的指针,但是在函数退出时字符串s
被破坏。因此,您要存储指向已删除对象的指针。
使用字符串而不是指针。与指针不同,字符串易于正确复制。试试这个
std::vector<std::string> Split(std::string input) {
std::vector<std::string> ret;
std::istringstream f(input);
std::string s;
while (getline(f, s, ' ')) {
ret.push_back(s);
}
return ret;
}
答案 1 :(得分:0)
复制指针并不意味着复制所指向的内容。
似乎您必须复制字符串。
class AddressBody extends Component {
render() {
let { addresses, showCart, deliveryTimeSetted, deleteAddress, deleteAddressResponse } = this.props;
if (showCart && Object.keys(showCart).length && "data" in showCart && showCart.data.items.length) {
showCart.data.items.map((value, index) => {
images.push(
<div className="product-item">
<img src={value.product.default_photo.photo_file.xsmall} />
</div>
);
});
leftMenuComponent = <LeftMenu showCart={showCart.data} />;
}
if (deleteAddressResponse && !deleteAddressResponse.success) {
alert(deleteAddressResponse.message);
this.props.fetchData("", types.DELETE_ADDRESS_RESPONSE, false);
}
if(addresses)...
if(deliveryTimeSetted) .....
return (......
....
答案 2 :(得分:0)
您从其他两个答案中得到了答案,但是我有另一种方法来分割字符串(称为String Tokenization
):
std::vector<std::string> split(std::string text) {
std::vector<std::string> words;
std::string temp{};
for (int i=0; i < text.size(); ++i) {
if (text[i] != ' ') {
temp.push_back(text[i]);
if (i == text.size()-1) {
words.push_back(temp);
}
}
else if (temp.size() != 0) {
words.push_back(temp);
temp.clear();
}
}
return words;
}