c++Primer 5th课后题9.34、9.43、9.47、9.45、9.49

//命令行打开.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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值