使用迭代器与insert,erase函数将一个给定s中的old替换成newv;
void func(string &s, const string &old, const string &newv)
{
for (auto it = s.begin(); (it + old.size()) != s.end();++it)
{
if (string(it, it + old.size()) == old)//用构造函数进行比较
{
it = s.erase(it, it + old.size());
it = s.insert(it, newv.cbegin(), newv.cend());
it += newv.size();
}
}
}
把上一题改为用一个下标和replace函数
void Replace(string &s, const string &old, const string &newv)
{
size_t len = old.size();
for (size_t beg = 0; beg + len != s.size(); ++beg)
{
if (s.substr(beg, len) == old)
{
s.replace(beg,len,newv);
beg += newv.size()-1;
}
}
}
前缀与后缀拼接到字符串,使用insert与append函数.
//等价与 cout<<pre + s+post;
string func(string &s, const string &pre, const string &post)
{
auto beg = s.begin();
beg = s.insert(beg, pre.begin(), pre.end());
s.append(post.begin(),post.end());
return s;
}
如果一个字母延伸到中线之上,如d,f.则称有上出头部分.如果一个字母延伸到中线之下,则称有下出头,p,g.读入一个单词文件,输出最长的不包含上出头和不包含下出头的单词.
const string bal("aceimnorsuvwxz");
ifstream is("Text.txt");
string word,ans;
size_t maxlen = 0;
while (is>>word)
{
if (word.find_first_not_of(bal)==string::npos)
maxlen = word.size() > maxlen ? (ans = word,word.size()) : (maxlen);
}
cout << "size : " << ans.size() << " word : " << ans;
======================================================================================
to_string(),stod(s,p,b)用来转换string和数值.
练习:求vector《string〉(1)所有元素表示整数(2)元素表示double:所有元素之和
vector<string> S{ "123", "234", "128" };
int sum = 0;
for (const auto &it : S)
sum += stoi(it);
cout << sum;
vector<string> S{ ".123", "234", "128.5" };
double sum = 0;
for (const auto &it:S)
sum += stod(it);
cout << sum;