剑指offer——替换空格 C++
2016-03-14 19:43
288 查看
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。
编程思路(假设字符串在一个足够长的数组中):
1)先遍历一遍N个字符串,统计出总空格数和字符串长度;
2)用指针pOrg指向原始未替换的字符串串尾(\0前面那个字符);
3)用指针pLast指向预计替换后的字符串串尾,同样是\0前面那个字符。注意,预计替换后的字符串长度=原字符串长度+总空格数*2;
4)再次遍历,如果pOrg指向了空格,就让*pLast赋值‘0’,然后减减,赋值'2',再减减,赋值'%';
5)完成。
编程思路(假设字符串在一个足够长的数组中):
1)先遍历一遍N个字符串,统计出总空格数和字符串长度;
2)用指针pOrg指向原始未替换的字符串串尾(\0前面那个字符);
3)用指针pLast指向预计替换后的字符串串尾,同样是\0前面那个字符。注意,预计替换后的字符串长度=原字符串长度+总空格数*2;
4)再次遍历,如果pOrg指向了空格,就让*pLast赋值‘0’,然后减减,赋值'2',再减减,赋值'%';
5)完成。
#include<iostream> #include<string> using namespace std; void main(void) { int arrayNum,spaceNum = 0; char *pOrg; char *pLast; char testStr[100] = {"We are happy."};//原始字符串,放在了一个足够长的数组中 cout << testStr<<endl; // 1)先遍历一遍N个字符串,统计出总空格数和字符串长度 for (arrayNum=0; testStr[arrayNum] != '\0'; arrayNum++) { if (testStr[arrayNum] == ' ') spaceNum++; } //cout << arrayNum << ',' << spaceNum<<endl; testStr[arrayNum + spaceNum * 2] = '\0'; pOrg = &testStr[arrayNum - 1];// 2)用指针pOrg指向原始未替换的字符串串尾(\0前面那个字符) pLast = &testStr[arrayNum + spaceNum * 2 - 1]; // 3)用指针pLast指向预计替换后的字符串串尾, //同样是\0前面那个字符。 //注意,预计替换后的字符串长度=原字符串长度+总空格数*2; // 4)再次遍历,如果pOrg指向了空格,就让*pLast赋值‘0’,然后减减,赋值'2',再减减,赋值'%'; for (int i = 0; i < arrayNum; i++) { if (*pOrg == ' ') { *pLast = '0'; pLast--; *pLast = '2'; pLast--; *pLast = '%'; pLast--; } else { *pLast = *pOrg; pLast--; } pOrg--; } cout << testStr<<endl; }
相关文章推荐
- Visual C++中的几个宏
- LeetCode中链表的试题
- YTU:C语言习题 输出月份
- YTU:C语言习题 不等长字符串排序
- C++ 运算结果出现 1.#IND, 1.#INF nan, inf 原因
- C++ vs Java
- YTU: C语言习题 字符串比较
- 【足迹C++primer】39、动态内存与智能指针(3)
- C++11 之for 新解
- C++ 命名空间(namespace)
- c++对一元n次方程近似解求法(不涉及大数)
- 话说C++中的左值、纯右值、将亡值
- 几组图让你明白C/C++程序运行中的堆、栈
- 话说C++中的左值、纯右值、将亡值
- 详解C语言中fseek函数和ftell函数的使用方法
- 详解C语言中的内存四区模型及结构体对内存的使用
- Effective C++ 55个具体做法
- C++第一次上机实验——循环
- C语言回顾与再学习——setbuf
- C++中实现队列类链式存储与栈类链式存储的代码示例