字符串的处理(分割字符串与替换字符)

// //main.cpp //newcoder // //Created by 吴珝君 on 2019/5/5. //Copyright ? 2019年 闲着也是贤者. All rights reserved. // /*题目描述 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。 则将剩下的参数字符添加到字符串的结尾。 给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成, 同时长度小于等于500。 测试样例: "A%sC%sE",7,['B','D','F'] 返回:"ABCDEF" */ #include #include #include using namespace std; class StringFormat { public: void splitString(const string &s, vector &v, const string &c) {string::size_type pos1,pos2; pos2 = s.find(c); //查找第一个字符串所在位置 pos1 =0; while (string::npos != pos2)//到了字符串结尾 { v.push_back(s.substr(pos1,pos2 - pos1)); //截取字符串长度 pos1 = pos2 + c.size(); //下一次要查找的位置 pos2 = s.find(c,pos1); //从字符串s的下标pos1位置开始,查找字符串c 返回b在s中的下标 } //分割之后的剩余部分 if (pos1 != s.length()) { v.push_back(s.substr(pos1)); //截取从pos1位置开始到终止位置的字符 } } string formatString(string A, int n, vector arg, int m) { // write code here //把字符串按照%s分割开来。。。。vector v; int i = 0; string s =""; if(!A.empty()) splitString(A, v, "%s"); for ( i = 0; i < v.size(); i++) { string t =v[i] + arg[i]; s+=t; } for (; i < m; i++) { s+= arg[i]; }return s; } string formatString1(string A, int n, vector arg, int m) { // write code here //把字符串按照%s分割开来。。。。 string rap = "%s"; string s = A; string::size_type pos1, pos2; pos1 = 0; pos2 = s.find(rap); int index =0; while (string::npos != pos2){ string ss = string(&arg[index]); s.replace(pos2, rap.size(),ss,0,1); index++; pos1 = pos2 + 1; //注意字符串的处理 pos2 = s.find(rap,pos1); } for (; index < m; index++) { s+= arg[index]; } return s; }}; int main(int argc, const char * argv[]) { // insert code here... //去前面的括号和后面的括号[3,4,5,6,7]; string s =""; getline(cin, s); int m =0; cin >>m; vector v; for (int i = 0; i < m; i++) { char t =0; cin >> t; v.push_back(t); } StringFormat ss; cout << ss.formatString1(s, s.length(), v, m); // cout << s.substr(1, s.size() -2); return 0; }

【字符串的处理(分割字符串与替换字符)】

    推荐阅读