【c++】字符串替换:——面试题
2017-08-30 17:50
232 查看
问题描述:—–(去哪网)
请你实现一个简单的字符串替换函数。原串中需要替换的占位符为”%s”,请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。给定一个字符串A,同时给定它的长度n及参数字符数组arg和它的大小m,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。
测试样例:
“A%sC%sE”,7,[‘B’,’D’,’F’]
返回:”ABCDEF”
代码实现:
知识点:
string中的find()的使用!
1,size_t find(const string&str,size_t pos = 0)const
第一个参数是要查找的字符串,第二个参数的从什么位置开始查找(0表示从整个字符串查找!)。若找到,则返回的出现的位置;若没找到,则返回string::npos。
2, size_t find(char c,size_t pos = 0)const 查找字符!
注意:第一个字符的位置是0,不是1。
string中的substr()的使用!
1, string substr (size_t pos = 0, size_t len = npos) const;
生成子串。子字符串是从字符位置pos开始并跨越len个字符(或直到字符串的末尾,以先到者为准)的部分。
len = npos表示直到字符串结尾的所有位置。
注意:区间位置是左闭右开
例如:
方法二:
请你实现一个简单的字符串替换函数。原串中需要替换的占位符为”%s”,请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。给定一个字符串A,同时给定它的长度n及参数字符数组arg和它的大小m,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。
测试样例:
“A%sC%sE”,7,[‘B’,’D’,’F’]
返回:”ABCDEF”
代码实现:
#include<iostream> #include<string> #include<vector> #include<stdio.h> using namespace std; class StringFormat { public: string formatstring(const string& str, int n, vector<char>& arg, int m) { string _str = str; string ret;//定义一个空字符串,用来返回结果 if (_str.empty() == true || arg.empty() == true)//字符串不能为空,或者arg不能为空 return ret; int i = 0; while (_str.find("%s") != string::npos) { ret += _str.substr(0, _str.find("%s"));//把第一次出现"%s"之前的字符串(子串拿出来)给ret ret += arg[i++];//把arg里要拿来替换的字符加在ret后面 _str = _str.substr(_str.find("%s") + 2);//把%后没有替换的部分赋值后继续 } ret += _str;//加上最后不需要替换的部分 while (i < m)//已经替换完,把arg剩下的部分加给ret { ret += arg[i++]; } return ret; } }; int main() { StringFormat sf; const string str("A%sC%sE"); char arr[] = { 'B', 'D', 'F' }; vector<char> arg; int n = str.length(); int m = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < m; i++) { arg.push_back(arr[i]); } string ret =sf.formatstring(str, n, arg, m); cout << ret << endl; system("pause"); return 0; }
知识点:
string中的find()的使用!
1,size_t find(const string&str,size_t pos = 0)const
第一个参数是要查找的字符串,第二个参数的从什么位置开始查找(0表示从整个字符串查找!)。若找到,则返回的出现的位置;若没找到,则返回string::npos。
2, size_t find(char c,size_t pos = 0)const 查找字符!
注意:第一个字符的位置是0,不是1。
string中的substr()的使用!
1, string substr (size_t pos = 0, size_t len = npos) const;
生成子串。子字符串是从字符位置pos开始并跨越len个字符(或直到字符串的末尾,以先到者为准)的部分。
len = npos表示直到字符串结尾的所有位置。
注意:区间位置是左闭右开
例如:
string str("hhh%shh"); cout << str.find("%s") << endl;//输出3 cout << str.substr(0, 4) << endl;//输出hhh% cout << str.substr(1) << endl;//输出hh%shh
方法二:
string formatString(string str, int n, vector<char>& arg, int m) { string ret = ""; int count = 0; for (int i = 0; i<n; i++){ if (str[i] == '%'&&i + 1<n&&str[i + 1] == 's'){ ret += arg[count]; count++; i++; } else{ ret += str[i]; } } if (count<m){ for (int i = count; i<m; i++){ ret += arg[i]; } } return ret; }
相关文章推荐
- 【面试题四】c/c++字符串,替换空格
- C++笔试题(剑指offer 面试题4 替换字符串中的空格)
- 【面试题004】c/c++字符串,替换空格
- 【C/C++开发】C++实现字符串替换的两种方法
- 替换字符串 c++
- c/c++面试1——字符串替换程序
- C++实现的文本字符串替换功能
- C++实现字符串替换
- [C/C++]_[初级]_[替换过滤utf8字符串里无效字符]
- c++的字符串char与string相互转化,以及string的,切割,替换字符,字符串拼接方法
- NYOJ 113 字符串替换(C++STL解法)
- C++字符串替换
- C++实现字符串替换的两种方法
- C++面试题之字符串的拷贝
- string替换所有指定字符串(C++)
- 剑指Offer算法题之字符串替换字符--面试题4:替换空格
- 腾讯面试题 替换字符串
- C++ 将一个文件里面的相同的一个字符串替换成另一个字符串
- [C/C++标准库]_[初级]_[不使用正则替换和删除字符串]
- C++中对字符串进行插入、替换、删除操作