用%20三个字符替换字符串里的空格,C++程序,有谁知道怎么改?错误是字符串数组越界了!!

#include<iostream>#include<string>usingnamespacestd;stringreplaceBlank(stringstr){int... #include<iostream>
#include<string>
using namespace std;

string replaceBlank(string str)
{

int n=str.length()-1;//不包括'\0'
if(str.empty()||n<=0) //判断字符串是否为空
return 0;

int numb=0;
for(int i=0;i<n;i++) //空格数计算
if(str[i]==' ')
numb++;

int numnewl=n+numb*2-1;
while(numnewl+1>n && n>=0)
{
if(str[n]==' ')
{
str[numnewl--]='0';
str[numnewl--]='2';
str[numnewl--]='%';
}
else
{
str[numnewl--]=str[n-1];
}
--n;
}
return str;
}

int main()
{
string str1;
cout<<"请输入字符串:";
getline(cin,str1);
cout<<"初始字符串为:"<<endl;
cout<<str1<<endl;

string str2;
str2=replaceBlank(str1);
cout<<"转换后的字符串为:"<<endl;
cout<<str2<<endl;

system("PAUSE");
return 0;
}
展开
 我来答
Rankabc
2014-04-29 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1125万
展开全部
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="a b c";
int i,j=0;
char *str;
for(i=0;s[i];i++)
{
if(s[i]==' ')j++;//计算空格数
}
str=new char[i+3*j+1]; 
for(i=0,j=0;s[i];i++)
{
if(s[i]==' ')
{str[j++]='%';str[j++]='2';str[j++]='0';}
else str[j++]=s[i];
}
str[j]=0;
cout<<str<<endl;
delete str;
return 0;
}
匿名用户
2014-04-29
展开全部

好复杂啊。。。。

string replaceBlank(string str)
{
string tmp = str;
for(unsigned int i = 0; i < tmp.length(); i++)
{
if(tmp.c_str()[i] == ' ')
{
string head = tmp.substr(0, i);
string buffer = tmp.substr(i + 1);
tmp = head + "%20" + buffer;
}
}
return tmp;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式