【剑指offer】2.3.2 字符串——面试题4:替换空格

56 篇文章 0 订阅
43 篇文章 0 订阅

字符串是由若干字符组成的序列。

c/c++中每个字符串都以字符'\0'作为结尾,因此每个字符串中都有一个额外字符的开销。

为了节省内存,c/c++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,他们实际会指向相同的内存地址,但用常量内存初始化数组,则不会指向同一个内存地址。

计算机生成了可选文字:int tmain (int TCHAR* argvO) argc, char strl "hello world"; char st 1-2 | ) "hello world" ; char* str3 — "hello world" • char* str4 "hello world" ; if (st rl str2) printf "strl and str2 are same. Nn"); else printf ("strl and str2 are not same. Nn"); if (str3 str4)

计算机生成了可选文字:printf ("str3 and str4 are same. Xn"); else printf ("str3 and str4 are not same. X n") ; return 0;

c#中封装的字符串类型System.String,其内容是不能改变的,一旦试图改变其内容,就会产生新的实例。

 

面试题4:替换空格

计算机生成了可选文字:题 目 : 请 实 现 一 个 函 数 , 把 字 符 串 中 的 每 个 空 格 替 换 成 " % 20 " 。 例 如 "We are happy."' 则 输 出 "We%20are%20happy."

先计算出空格数量,得出替换后的字符串长度,再进行移动,时间复杂度为on

若边判断空格,边替换,则每次替换要移动后续的字符串,使得时间复杂度达到on2

//题目描述
//
//请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 
#include<string>
#include<iostream>
#include<windows.h>
using namespace std;
class Solution {
public:
	void replaceSpace(char *str,int length) {
		int cnt=0;
		for(int i=0;i<length;i++){
			if(*(str+i)==' ')cnt++;
		}
		int len=length+2*cnt;
		for(int i=length;i>0;i--){
			if(*(str+i)==' '){
				str[len--]='0';
				str[len--]='2';
				str[len--]='%';
			}else{
				
				str[len--]=*(str+i);
			}
		}
	}
};

int main(){
	char str[]="We Are Happy";
	// 如果使用char* str="We Are Happy"就会出错
	Solution test=Solution();
	test.replaceSpace(str,12);
	cout<<str;
	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值