《剑指offer》第五题(替换空格)
// 替换空格
// 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,
// 则输出“We%20are%20happy.”。 #include <iostream>
using namespace std; bool replace_space(char* str,const int length)
{
if (str == NULL && length <= )//上来先判断
return false; int true_length = , count = , i = ;
while (str[i] != '\0')//这里要用单引号
{
++true_length;//输入的length是数组最大长度,真实长度有待检测
if (str[i] == ' ')
++count;
++i;
} int new_length = true_length + * count;//算法核心思想,从尾到头复制
if (new_length > length)//要判断原数组长度够长不
return false;//难受,写的时候落下个分号 for (int i = count; i > ;)//当所有空格被替代完后结束
{
if (str[true_length] == ' ')
{
new_length=new_length - ;//如果该复制空格了,先提前移两位位,并赋值“%20”,注意是两位!!
str[new_length] = '%';//这里也要用单引号
str[new_length+] = '';
str[new_length+] = '';//这里也写错过,是+2,不小心写成+1!!
i--;//这个判断条件也写错过,刚才写进for()中了!!
}
else
str[new_length] = str[true_length]; new_length -= ;
true_length -= ; }
return true;
} // ====================测试代码====================
void Test(const char* testName, char str[], int length, const char expected[])
{
if (testName != NULL)
printf("%s begins: ", testName); replace_space(str, length); if (expected == NULL && str == NULL)
printf("passed.\n");
else if (expected == NULL && str != NULL)
printf("failed.\n");
else if (strcmp(str, expected) == )
printf("passed.\n");
else
printf("failed.\n");
} // 空格在句子中间
void Test1()
{
const int length = ; char str[length] = "hello world";
Test("Test1", str, length, "hello%20world");
} // 空格在句子开头
void Test2()
{
const int length = ; char str[length] = " helloworld";
Test("Test2", str, length, "%20helloworld");
} // 空格在句子末尾
void Test3()
{
const int length = ; char str[length] = "helloworld ";
Test("Test3", str, length, "helloworld%20");
} // 连续有两个空格
void Test4()
{
const int length = ; char str[length] = "hello world";
Test("Test4", str, length, "hello%20%20world");
} // 传入nullptr
void Test5()
{
Test("Test5", nullptr, , nullptr);
} // 传入内容为空的字符串
void Test6()
{
const int length = ; char str[length] = "";
Test("Test6", str, length, "");
} //传入内容为一个空格的字符串
void Test7()
{
const int length = ; char str[length] = " ";
Test("Test7", str, length, "%20");
} // 传入的字符串没有空格
void Test8()
{
const int length = ; char str[length] = "helloworld";
Test("Test8", str, length, "helloworld");
} // 传入的字符串全是空格
void Test9()
{
const int length = ; char str[length] = " ";
Test("Test9", str, length, "%20%20%20");
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();//是无效输入
Test6();//是空输入,这俩还不太一样
Test7();
Test8();
Test9(); system("pause");
}


《剑指offer》第五题(替换空格)的更多相关文章
- 《剑指Offer》算法题——替换空格
题目:请实现一个函数,将一个字符串中的空格替换成“ % 20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are % 20Happy. class Solution ...
- 剑指Offer - 九度1510 - 替换空格
剑指Offer - 九度1510 - 替换空格2013-11-29 20:53 题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之 ...
- 剑指offer面试题4 替换空格(java)
注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...
- 剑指offer面试题4 替换空格(c)
- 剑指offer第二版-5.替换空格
面试题5:替换空格 题目要求: 实现一个函数,把字符串中的每个空格都替换成“%20”,已知原位置后面有足够的空余位置,要求改替换过程发生在原来的位置上. 思路: 首先遍历字符串求出串中空格的数量,求出 ...
- 剑指Offer:面试题4——替换空格(java实现)
问题描述:请实现一个函数,把字符串中的每个空格替换成"%20". 例如: 输入:"We are happy." 输出:"We%20are%20happ ...
- C++版 - 剑指offer 面试题4: 替换空格 题解
面试题4:替换空格 提交网址: http://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=1 ...
- 剑指offer(2)替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 题目分析 我们如果要替换空格,两步 ...
- 剑指offer【02】- 替换空格(Java)
题目:替换空格 考点:字符串 题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. ...
- 剑指Offer(4)——替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入“We are happy.”,则输出“We%20are%20happy.”. 思路: 如果按照顺序从前往后依 ...
随机推荐
- .NET RSA解密、签名、验签
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Sec ...
- mysql buffer
php与mysql的连接有三种方式,mysql,mysqli,pdo.不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别. 什么叫使用buffer和不使用buffer呢? 客户端 ...
- php 5.0 新字符串
简介:新字符串以“<<<”开始,后边紧跟子字符串标记,之后为字符串内容,最后用标记和分号结束. 说明:"<<<标记"后不要有空格符,否则可能出现 ...
- php PDO遇到的坑
<?php $dbConn = new PDO( "mysql:host=localhost;dbname=adtuu",'root','root', array( // 强 ...
- swift 错误集锦
1.注册 NIB 出现错误 // error:'registerNib(_:forCellReuseIdentifier:)' has been renamed to 'register' (_:fo ...
- OnClick,OnClientClick和OnServerClick的区别
OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在IE端运行,一点击就运行 OnClick是服务器端事件处理方法,在服务器端也就是IIS中运行, ...
- 比特币、莱特币钱包下载和把数据迁移到C盘以外其他盘
比特币是目前最热门和价格最高的虚拟币,国内外多个平台可以进行交易,有些商家可以用比特币进行支付有些国家可以在ATM取款. Bitcoin-Qt就是最早的比特币客户端,构建了比特币的骨干网络,具有高度的 ...
- 远程获得的有趣的linux命令
使用这些工具从远程了解天气.阅读资料等. 我们即将结束为期 24 天的 Linux 命令行玩具日历.希望你有一直在看,如果没有,请回到开始,从头看过来.你会发现 Linux 终端有很多游戏.消遣和奇怪 ...
- c/c++日期时间处理与字符串string转换
转自:https://www.cnblogs.com/renjiashuo/p/6913668.html 在c/c++实际问题的编程中,我们经常会用到日期与时间的格式,在算法运行中,通常将时间转化为i ...
- cursor图标自定义
cursor: url(./images/favicon.ico), auto; 首先auto必须加上,其次必须使用ico文件,目前来说ico文件没有兼容性问题,ico格式怎么转? 传送门:http: ...