【发布时间】:2018-08-16 07:33:26
【问题描述】:
我正在运行一个测试程序,我在其中创建一个字符串列表并尝试找出哪些字符串具有特定的后缀或前缀。
#include <iostream>
#include <list>
#include <string>
using namespace std;
list<string> beginWith(const string& pre, list <string> test);
list<string> endWith(const string& suf,list <string> test);
int main(){
list <string> testList(5);
string suffix = "able";
string prefix = "M";
testList.push_back("Agreeable");
testList.push_back("Doable");
testList.push_back("Machine");
testList.push_back("Makeable");
testList.push_back("Available");
for(list <string>::const_iterator it = testList.begin(); it != testList.end(); it++){
cout << *it << endl;
}
for(list <string>::const_iterator it = beginWith(prefix, testList).begin(); it != beginWith(prefix, testList).end(); it++){
cout << *it << endl;
}
for(list <string>::const_iterator it = endWith(suffix, testList).begin(); it != endWith(suffix, testList).end(); it++){
cout << *it << endl;
}
return 0;
}
list<string> beginWith(const string& pre, list<string> test){
list <string> answer;
for(list <string>::const_iterator it = test.begin(); it != test.end(); it++){
if(pre == it->substr(0, pre.length())){
answer.push_back(*it);
}
}
return answer;
}
list<string> endWith(const string& suf, list <string> test){
list <string> answer;
for(list <string>::const_iterator it = test.begin(); it != test.end(); it++){
if(suf == it->substr(it->length() - suf.length() , it->back())){
answer.push_back(*it);
}
}
return answer;
}
我声明了一个字符串列表,使用第一个 for 循环将它们打印出来。我还有 2 个函数将遍历该列表,然后返回具有特定前缀或后缀的字符串列表。我将使用第二个和第三个 for 循环打印出来。第一个 for 循环打印正确但是,我得到一个分段错误:11 当我打印出第二个和第三个 for 循环时。我对如何让这些 for 循环遍历列表函数并打印出内容感到困惑。
【问题讨论】:
-
list<string> tempList = beginsWith(...); for(... it = tempList.begin(); it != tempList.end(); ...
标签: c++ list function for-loop iteration