Offer
来源:互联网 发布:seo基础理论 编辑:程序博客网 时间:2024/06/05 11:09
1.替换空格%20
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。
1.1分析
将长度为1的空格替换为长度为3的“%20”,字符差的产度变长。如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简 单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。但是如果面试官要求 在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。
如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么我们就考虑从后往前进行替换。
- 首先遍历原字符串,找出字符串的长度以及其中的空格数量,
- 根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。
- 设置两个指针point1和point2分别指向原字符串和新字符串的末尾位置。
- 如果point1指向内容不为空格,那么将内容赋值给point2指向的位置,如果point1指向为空格,那么从point2开始赋值“02%”
- 直到point1==point2时表明字符串中的所有空格都已经替换完毕。
1.2代码实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
#include<stdio.h>
using
namespace
std;
//length为字符串总容量
void
replacespace(
char
string[],
int
length) {
int
blanknumber = 0;
int
i;
for
(i = 0; string[i] !=
'\0'
; i++) {
if
(string[i] ==
' '
) {
blanknumber++;
}
}
int
k = i + 2 * blanknumber;
if
(k > length)
return
;
string[k]=
'\0'
;
//此行必不可少
int
point1 = i - 1, point2 = k-1;
for
(; point1 >= 0 && point2 > point1; point1--) {
if
(string[point1] ==
' '
) {
string[point2--] =
'0'
;
string[point2--] =
'2'
;
string[point2--] =
'%'
;
}
else
string[point2--] = string[point1];
}
}
int
main() {
char
*string=
new
char
[50];
while
(
gets
(string)) {
replacespace(string, 50);
puts
(string);
}
return
0;
}
2.清除空格
题目:请实现一个函数,把字符串中的每个空格清除掉。例如输入“We are happy.”,则输出“Wearehappy.”。
2.1分析
这道题目是需要清楚空格,那么清除空格后所得到的字符串要比原先的字符串要短,这是我们从头到尾进行清楚空格的话就不会覆盖到空格后面的字符,所以我们可以从头开始清除。
- 设定两个指针p1和p2初始状态都指向字符串首字符。
- 如果p2指向的元素不为空格,那么将p2指向的内容赋值给p1,然后p1和p2指向下一个元素;如果p2指向的内容为空格,那么p2指向下一个元素。
- 直到p2指向字符串末尾的'\0'时清除空格结束。123456789101112131415161718192021222324
#include<iostream>
#include<stdlib.h>
using
namespace
std;
void
ReplaceBlank(
char
*s)
{
//设置两个指针指向数组首元素
char
*p1=s;
char
*p2=s;
while
(
'\0'
!=*p1)
{
if
(
' '
!=*p2)
//如果p2指向不为空格,则将p2指向内容复制给p1指向
*p1++=*p2++;
else
//如果p2指向为空格,则p2指针向前移动一格。
p2++;
}
}
void
main()
{
char
test[100]=
"we are happy."
;
cout<<test<<endl;
//we are happy.
ReplaceBlank(test);
cout<<test<<endl;
//we are happy.
system
(
"pause"
);
}
阅读全文
0 0
- Offer
- offer
- offer
- offer
- offer
- OFFER
- OFFER
- Offer
- offer
- offer
- Offer
- offer
- offer
- offer
- offer
- offer
- Offer
- offer
- vijos(又一道并查集,我并查集可算是再也不用做什么题了)
- [转载]自己亲身经历,房屋买卖二手房,和中介打官司,唉,烦心!
- 利用Construct2制作第一个游戏
- 敏捷个人之第四天
- 提高代码阅读能力的7种方法
- Offer
- Discovering Gold LightOJ
- git 使用
- 常用算法之:1、最小二乘法(1)
- mysql官方社区版5.5.47 升级5.5.54
- 第八周(2) 项目3.1-稀疏矩阵的三元组表示的实现及应用
- 粉丝福利 | 清华博导为你系统讲述人工智能的前世今生!
- 解决ubuntu下sublime 3无法输入中文问题
- 机器学习(21)之scikit-learn Adaboost类库的实战分析