今天刷剑指offer第2道题了,来看看String吧。
string类使用起来比字符数组简单,同时提供将字符串作为一种数据类型的表示方法。要使用string类,得在程序中包含头文件,且string类位于名称空间std中,string分为C风格字符串和C++的,在此都先在头文件安排进来。
#include<string>
#include<cstring>
using namespace std;
回顾一个问题,怎么判断是否空指针(一个被赋值为0的指针,它不指向任何的对象或者函数)。
1、使用指针的第一件事就是需要看这个指针是否是空指针(坚决不能使用空指针,否则程序就会蹦。意思就是:为一个指针赋值为空指针是不会报错的:char*p;但是在使用的时候一定要判断是否为空指针(即该指针有没有指向,不为空才能操作)
判断空指针的方法:if(p!=nullptr){};//nullptr是空指针的意思//若明确指针该指针有指向,则不需要做判断,若不知道,则要做判断
2、一个指针不是空指针和野指针就是正常指针。
好了,各位看官,首先得判断给的字符串指针str是否空指针啦,既然非空那length也非0啦
if(str==nummptr&&length<=0)
return;
如果为字符替换的话,直接用replace函数不是很好,尝试不成功,还是按照指针写吧。如果从前往后遍历,则每次需要额外插入两个字符,字符串移动次数较多,所以用从后往前吧。
首先遍历一遍找到原来字符个数和里面空格的个数。
int num=0;
int spacenum=0;
while(str[i]!='\n'){
num++;
if(str[i]==' ')
spacenum++;
i++;
}
#include "pch.h"
#include <iostream>
#include<string>
using namespace std;
//method 1
int main()
{
char *str= "we are happy";
int length = 50;
if (str==nullptr&&length <= 0)
return 0;
int num = 0;
int spacenum = 0;
int i = 0;
while (str[i] != '\0') {
num++;
if (str[i] == ' ')
spacenum++;
i++;
}
cout <<"space"<<spacenum << "length"<<num << endl;
int newNum = num + 2 * spacenum;
if (newNum > length)
return 0;
while (num >= 0 && newNum > num) {
if (str[num] == ' ') {
str[newNum--] = '0';
str[newNum--] = '2';
str[newNum--] = '%';
}
else {
str[newNum--] = str[num];
}
num--;
}
cout << str;
return 0;
}