替换空格
2016-05-06 21:19
330 查看
题目:实现一个函数将字符串中每个空格替换成“*♥*”。例如:输入“Hello kkw accompany you long”,输出:“Hello*♥*kkw*♥*accompany*♥*you*♥*long”。
思路:先遍历一次字符串,统计出字符串的原始长度和空格个数,并由此可以计算出替换之后字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的字符串长度加上2*空格数目。
然后从后向前拷贝字符串,遇到一个字符串就替换。
时间复杂度为O(n)
思路:先遍历一次字符串,统计出字符串的原始长度和空格个数,并由此可以计算出替换之后字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的字符串长度加上2*空格数目。
然后从后向前拷贝字符串,遇到一个字符串就替换。
时间复杂度为O(n)
#include<iostream> using namespace std; #pragma warning (disable :4996) void ReplaceBlank(char *str, int len) { if (str == NULL || len <= 0) return; char *begin = str; int OriginaLen = 0; int BlankNum = 0; //求字符串原始长度和空格数 while (*begin != '\0') { OriginaLen++; if (*begin == ' ') BlankNum++; begin++; } int Newlen = OriginaLen + (BlankNum * 2); if (Newlen > len) return; int IndexOfOrigina = OriginaLen - 1; int IndexOfNew = Newlen - 1; while (IndexOfOrigina >= 0 && IndexOfNew > IndexOfOrigina) { if (str[IndexOfOrigina] == ' ') { str[IndexOfNew--] = '*'; str[IndexOfNew--] = 3;//心形的ASCII码是3 str[IndexOfNew--] = '*'; IndexOfOrigina--; } else { str[IndexOfNew--] = str[IndexOfOrigina--]; } } cout << str << endl; } int main() { char str[1024]; memset(str, '\0', sizeof(str)); strcpy(str, "Hello kkw accompany you long"); cout << str << endl; ReplaceBlank(str, 1024); getchar(); return 0; }
相关文章推荐
- 理解java数组的内部机制
- python中的json的基本使用方法
- python中的json的基本使用方法
- PowerShell调用jira rest api实现对个人提交bug数的统计
- Android-Activity详解
- 动态规划1002
- URAL 1776 Anniversary Firework 概率dp+区间dp
- Angularjs的理解和认识
- c++ primer 学习笔记(2): 函数 function
- 瀑布流
- 使用Pandoc命令将Markdown格式文件转换为HTML格式文件
- extern "C"的用法解析
- VisualGDB 调试NDK程序
- virtual
- Linux用户和组及其权限管理
- c++作业5
- 平日小问题 (1): call of overloaded 'max(char&, char&)' is ambiguous
- 树莓派学习系列2---树莓派的配置详悉
- Activity的生命周期
- 字符串的增删改查