【发布时间】:2021-02-12 22:03:13
【问题描述】:
我正在尝试为我的大学课程制作一个简单的程序,该程序应该根据字符串中的分隔符(分隔符)将给定的字符串(目标)拆分为字符串向量。我目前正在尝试遍历目标变量并查找字符串中的特定字符是否等于分隔符字符串中的字符。我知道首先将 delimiter 变量更改为 char 会更容易,但我的教授希望 delimiter 变量是一个字符串,我不知道为什么。我不断收到此错误:
main.cpp:18:21: error: no match for ‘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] << " ";
}
}
我们将不胜感激。
【问题讨论】:
-
没有operator defined这样的,编译器是对的。你有什么问题?
-
std::string::find会更简单 -
target[i]是一个字符。一个孤独的char。如果您需要与作为字符串的分隔符进行比较,则还必须遍历分隔符字符串。众所周知,分隔符中会有多个字符。尝试多个循环。外部循环通过target一个字符一个字符地工作。内部循环通过target和delimiter工作。如果内部循环找到完全匹配,则将分隔符前面的标记存储在vector中。如果不是,则将外循环前进一并从外点重新开始内循环。 -
注意:上面的速度不是特别快,但很简单,可以帮助您入门。
-
您希望
target[i] == delimiter做什么?左边是一个字符;在右边一个字符串。您可以比较两个字符串。您可以比较两个字符。将单个字符与整个字符串进行比较意味着什么?为什么你从target中选择了一个字符,而不是从delimiter中选择了一个?
标签: c++ string char comparison