C++primer学习:string的操作习题(1):

使用迭代器与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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值