title:
一、将字符串中的所有空格用%20替换
二、扩展:将两个有序的数组连接成一个有序数组,第一个数组足够大
thought:
1、原串的内存足够大,在原串中实现替换
2、可开辟新空间,将原串复制到新串的过程中把空格替换
realize:
一、
实现第一个想法:
1、统计原串s中(长度len)空格的个数cnt(cnt为0表示无空格)
2、则新串的长度(newLen)为len+cnt*2+1(1代表结束符)
3、指针p,q分别指向原串和新串的尾部,
*p==' ',用‘%20’替换后复制到q
*p!=' ',将此字符复制到q;
结束条件是新串指针q与原串指针p相遇(p==q)
实现第二个想法(此方法较简单):
1、开辟新内存s1(内存足够存储替换后的字符串)
2、依次将s中的字符复制到s1中,遇到空格就用‘%20’替换
二、
利用替换空格的第一个思想:
1、计算A2的长度len,以此确定A1的有效长度;
2、从两个数组A1、A2的最后一位开始比较,较大的移至A1的有效长度内的尾部;
3、两个数组依次左移逐个比较,最终移至数组的首位,比较结束,移位也结束。
注:
在从键盘输入带空格的字符串时不能直接用cin>>s
因为cin遇空格结束,可以用cin.getling(s,size_t)
一、将字符串中的所有空格用%20替换
二、扩展:将两个有序的数组连接成一个有序数组,第一个数组足够大
thought:
1、原串的内存足够大,在原串中实现替换
2、可开辟新空间,将原串复制到新串的过程中把空格替换
realize:
一、
实现第一个想法:
1、统计原串s中(长度len)空格的个数cnt(cnt为0表示无空格)
2、则新串的长度(newLen)为len+cnt*2+1(1代表结束符)
3、指针p,q分别指向原串和新串的尾部,
*p==' ',用‘%20’替换后复制到q
*p!=' ',将此字符复制到q;
结束条件是新串指针q与原串指针p相遇(p==q)
实现第二个想法(此方法较简单):
1、开辟新内存s1(内存足够存储替换后的字符串)
2、依次将s中的字符复制到s1中,遇到空格就用‘%20’替换
二、
利用替换空格的第一个思想:
1、计算A2的长度len,以此确定A1的有效长度;
2、从两个数组A1、A2的最后一位开始比较,较大的移至A1的有效长度内的尾部;
3、两个数组依次左移逐个比较,最终移至数组的首位,比较结束,移位也结束。
注:
在从键盘输入带空格的字符串时不能直接用cin>>s
因为cin遇空格结束,可以用cin.getling(s,size_t)
或者getline(cin,s);
说明:这里对数组的合并只在上面提示了思路,还没有用代码实现
#include <iostream>
#include <string>
using namespace std;
void replace_space1(char *); //在原串中用%20替换空格(原串内存足够大)
void replace_space2(char *); //开辟新内存用%20替换空格
void array_combin(int* ,int* );//将两个有序数组组合在一起,形成一个新数组,仍保持有序
void replace_space1(char *str)
{
if(str == NULL)
return;
int cntSpace = 0,Len = strlen(str); //Len不包括结束符
char *p = str;
while(*p != '\0')
{
if(*p++ == ' ')
cntSpace++;
}
if(0 == cntSpace)
{
cout << "字符串中没有空格!" << endl;
return;
}
int newLen = Len+cntSpace*2+1; //+1代表将结束符计入总长
char *End = str+Len; //此时End指向的是结束符‘\0’
char *newEnd = str+newLen-1;
//cout << *(str+Len-1) << endl; //此时输出的是str的最后一个字符(非结束符)
//cout << "Len=" << Len << endl;
//cout << "newLen=" << newLen << endl;
while(End != newEnd)
{
if(' ' == *End)
{
*(newEnd--) = '0';
*(newEnd--) = '2';
*(newEnd--) = '%';
End--;
}
else
{
*newEnd-- = *End--;
}
}
cout << "空格被替换后得到的新字符串:" << endl;
cout << str << endl;
}
void replace_space2(char *str)
{
if(str == NULL)
return;
int cntSpace = 0,Len = strlen(str); //Len不包括结束符
char *p = str;
while(*p != '\0')
{
if(*p++ == ' ')
cntSpace++;
}
if(0 == cntSpace)
{
cout << "字符串中没有空格!" << endl;
return;
}
int newLen = Len+cntSpace*2+1; //+1代表将结束符计入总长
char *s1 = new char[newLen];
p = str;
char *q = s1;
while (*p != '\0')
{
if(' ' == *p)
{
*q++ = '%';
*q++ = '2';
*q++ = '0';
p++;
}
else
*q++ = *p++;
}
*q = '\0';
cout <<"替换空格后的新字符串:" << endl;
cout << s1 << endl;
}
int main()
{
char *s = new char[100];
cout << "输入一个字符串:" << endl;
cin.getline(s,100); //直接用cin >> s不能输入带空格的字符串
//replace_space1(s);
replace_space2(s);
return 0;
}