如何解决比较迭代字符串和单字符字符串
我正在尝试为我的大学课程制作一个简单的程序,该程序应该根据字符串中的分隔符(分隔符)将给定的字符串(目标)拆分为字符串向量。我目前正在尝试遍历目标变量并查找字符串中的特定字符是否等于分隔符字符串中的字符。我知道首先将分隔符变量更改为字符会使这更容易,但我的教授希望分隔符变量为字符串,我不知道为什么。我不断收到此错误:
main.cpp:18:21: 错误:“operator==”不匹配(操作数类型为“char”和“std::string {aka std::basic_string}”)
这是我目前所拥有的:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector <string> split(string target,string delimiter) {
vector <string> splitString;
splitString.reserve(target.length());
for(int i=0; i<target.length(); i++) {
if(target[i] == delimiter) { //problem originates from this line
continue;
}
else {
splitString[i] += target[i];
}
}
return splitString;
}
int main() {
vector <string> displayString;
displayString = split("10,20,30",",");
for(int i=0; i<displayString.size(); i++) {
cout << displayString[i] << " ";
}
}
任何和所有帮助将不胜感激。
解决方法
问题
比较 string
和 char
。 Asker 自己解决了这个问题。
splitString.reserve(target.length());
保留存储但不做任何事情。它只是分配空间。这意味着
splitString[i] += target[i];
写入尚未初始化的字符串。这很可能是报告的崩溃。应该用过
splitString.resize(target.length());
resize
获取空间并初始化它。但是......一旦你解决了下一个问题,可能会占用太多空间。
splitString[i] += target[i];
上的循环内的 i
有效地将 target
中的字符一一复制到 string
中的 splitString
中。您想在分隔符之间累积该字符并将累积存储在 splitString
中。
解决方案
vector<string> split(string target,string delimiter)
{
vector<string> splitString;
string acumulator;
for (size_t i = 0; i < target.length(); i++)
{
if (target[i] == delimiter[0]) // please check this with the
// instructor. They are crafty.
// there could be some subtext
// you have missed
{
splitString.push_back(acumulator); // store accumulation
acumulator = ""; // restart accumulating
}
else
{
acumulator += target[i]; // accumulate
}
}
splitString.push_back(acumulator); // store whatever is left
return splitString;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。