//命令行打开.exe时文件应与exe同目录,ctrl+f5运行时文件应在main.c同目录
//习题9.34
int main()
{
vector<int> vi = { 1,2,3,4,5,6,7,8 ,9 };
auto iter = vi.begin();
string tmp;
while (iter != vi.end()) {
if (*iter % 2) {
iter = vi.insert(iter, *iter);
++iter;//注意此处,与insert_after不同
}
++iter;
for (auto begin = vi.begin(); begin != vi.end(); begin++)
cout << *begin << " ";
cout << endl;
cin >> tmp;
}
return 0;
}
//习题9.43
void replace_string(string &s, const string &oldVal, const string &newVal)
{
auto p = s.npos;
while ((p = s.find(oldVal)) != s.npos) {
s.replace(p, oldVal.size(), newVal);
p += newVal.size();
}
}
void rep_string(string &s, const string &old, const string &neww)
{
auto iter = s.begin();
while (iter != s.end()) {
auto iter1 = iter;
auto iter2 = old.begin();
while ((iter2 != old.end()) && (*iter2 == *iter1)) {
iter2++;
iter1++;
}
if (iter2 == old.end()) {
//s.erase(pos,len); 删除从位置pos开始的len个元素,返回s的引用
s.erase(iter - s.begin(), old.size());
//s.insert(pos,args); 在pos前插入,pos下标/迭代器。若下标,返回s的引用;若迭代器,返回,第一个的迭代器
s.insert(iter - s.begin(), neww);//改为s.insert(iter,neww);编译不通过?
iter += neww.size();//开始时忘了这一句,
}
else
iter++;
}
}
int main()
{
string s;
string newval, oldval;
cout << "请输入一个字符串:" << endl;
getline(cin, s);
cout << "请输入要替换的元素:" << endl;
cin >> oldval;
cout << "将元素替换为:" << endl;
cin >> newval;
cout << "原来的s:" << s << endl;
replace_string(s, oldval, newval);
cout << "改变后的s:" << s << endl;
}
//习题9.47
int main()
{
string::size_type pos = 0;
string num{ "0123456789" };
string s1{ "ab2c3d7r4e6" };
while ((pos = s1.find_first_of(num, pos)) != string::npos) {
cout << s1[pos];
pos++;
}
pos = 0;
while ((pos = s1.find_first_not_of(num, pos)) != string::npos) {
cout << s1[pos];
pos++;
}
}
//习题9.49
//由该题要求分析:输入文件1.txt,内容为aaa bbb dd fef cccc,
//输出应为oooooo(首先cccc中不含出头,且最长)
int main(int argc, char *argv[])
{
string s1{ "bdfghjklpqty" }, word, maxword;
string::size_type maxsize = 0;
ifstream in(argv[1]);
if (!in) {
cerr << "未能打开文件!" << endl;
return -1;
}
cout << "文件内容为:" << endl;
while (in >> word) {
cout << word << " ";
if (word.find_first_of(s1) != word.npos)
continue;
if (word.size() > maxsize) {
maxsize = word.size();
maxword = word;
}
}
cout << endl;
cout << "最长的词为:" << maxword << endl;
}
//习题9.45
string name_string(string &name, string &prefix, const string &sufix)
{
name.insert(name.begin(), ' ');
name = prefix.append(name);
name.append(" ");
name.append(sufix);
return name;
}
int main()
{
string name, prefix, sufix;
cout << "输入名字" << endl;
cin >> name;
cout << "输入前缀" << endl;
cin >> prefix;
cout << "输入后缀" << endl;
cin >> sufix;
name = name_string(name, prefix, sufix);
cout << "合成结果为:" << name << endl;
}
c++Primer 5th课后题9.34、9.43、9.47、9.45、9.49
最新推荐文章于 2019-04-27 12:30:46 发布