我正在尝试将字符串和空集传递给我的函数。然后,我想在我的main中调用该函数并打印出集合中的所有元素。
这是我的功能代码:
#include<iostream>
using std::cout; using std::endl;
#include<algorithm>
using std::set_union; using std::copy;
#include<iterator>
using std::inserter; using std::ostream_iterator;
#include<string>
using std::string;
#include<set>
using std::set;
void removing(const string &word, set<string> &result) {
string del_word = word;
char erased_l;
for(int i = 0; i < del_word.length(); i++) {
erased_l = word[i];
del_word.erase(0, 1);
del_word = erased_l + del_word;
}
}
下面是我调用函数的主要代码:
int main (){
set<string> jump = {};
set<string> del = removing("axiom", jump);
for (string ele:del) {
cout << ele << endl;
}
}
我收到以下错误:
No viable conversion from 'void' to 'set<std::__1::string>' (aka 'set<basic_string<char, char_traits<char>, allocator<char> > >')
错误在第16行:
set<string> del = removing("axiom", jump);
我的代码正在尝试完成: 如果我传入公理,那么我希望将我的字符串设置为{xiom,aiom,axom,axim,axio}。因此,删除第一个字母,保留其余单词。然后删除第二个字母,保留其余单词,等等...
答案 0 :(得分:1)
主要问题包括:
无法将void
函数的返回值分配给set
,因此会导致编译器错误。您的设计是将对空结果set
的引用传递到removing
函数中,并用结果数据填充它,因此您可以在此处删除分配。
result
函数中的removing
中没有添加任何内容,因此该函数以空开头,并在函数调用后结束为空。
这是一个有效的版本:
void removing(const string &word, set<string> &result) {
for (int i = 0; i < word.length(); i++) {
result.insert(word.substr(0, i) + word.substr(i + 1, word.length()));
}
}
int main () {
set<string> jump = {};
removing("axiom", jump);
for (string ele : jump) {
cout << ele << endl;
}
}
输出:
aiom
axim
axio
axom
xiom
话虽如此,我仍然不清楚为什么result
应该是函数的参数。如果您仅打算使用它来存储此特定结果,那么从调用者的角度来看,这种设计似乎更加简洁:
set<string> removing(const string &word) {
set<string> result;
for (int i = 0; i < word.length(); i++) {
result.insert(word.substr(0, i) + word.substr(i + 1, word.length()));
}
return result;
}
int main () {
set<string> jump = removing("axiom");
for (string ele : jump) {
cout << ele << endl;
}
}