用%20替换空格

时间:2010-04-22 00:15:50

标签: c++ arrays

以下程序用%20替换所有空格。编译工作正常,但程序在运行时终止。任何帮助???

#include<iostream>
#include<string>
using namespace std;

void removeSpaces(string url){

int len=url.length();
int i,count=0;
while(i<=len){
if(url[i]==' ')
count++;
i++;
}
int length2=len+(count*2);
string newarr[length2];
for(int j=len-1;j>=0;j--){
if(url[j]==' ')
{
  newarr[length2-1]='0';
  newarr[length2-2]='2';
  newarr[length2-3]='%';
  length2=length2-3;
}
else
{
  newarr[length2-1]=url[j];
  length2=length2-1;
}
}
cout<<"\nThe number of spaces in the url is:"<<count;
cout<<"\nThe replaced url is:"<<newarr;

}

int main(){

string url="http://www.ya h o o.com/";
removeSpaces(url);
}

5 个答案:

答案 0 :(得分:5)

这称为“off by one”错误。

while(i<=len){
    if(url[i]==' ')

我还会考虑std::string::find()std::string::replace(),而不是你正在做的事情。

编辑:由于海报说这不是作业:

for (size_t pos = myString.find(' '); 
     pos != string::npos; 
     pos = myString.find(' ', pos))
{
    myString.replace(pos, 1, "%20");
}

答案 1 :(得分:3)

我没有初始化为0 - 如果使用','而不是将每个变量放在自己的行上,这就是危险。

答案 2 :(得分:2)

string newarr[length2];

应该是:

string newarr;

char newarr[length2];

或更恰当的方式:

char *newarr = new char[length2];
... // code.
delete[] newarr;

答案 3 :(得分:2)

只要您使用string而非char *,为什么不使用string方法?这实际上是您尝试做的事情的翻译(甚至没有使用::find::replace):

void removeSpaces(string url)
{
    string newUrl;
    int count = 0;

    for (int j = 0; j < url.length(); ++j)
    {
        if (url.at(j) == ' ')
        {
            newUrl.append("%20");
            ++count;
        }
        else
            newUrl.append(url.at(j));
    }

    cout << "\nThe number of spaces in the url is:" << count;
    cout << "\nThe replaced url is:"<< newUrl;
}

修改:我看到@Bryan已为::find::replace提供了该版本。

答案 4 :(得分:1)

string replaceinString(std::string str, std::string tofind, std::string toreplace)
{
        size_t position = 0;
        for ( position = str.find(tofind); position != std::string::npos; position = str.find(tofind,position) )
        {
                str.replace(position ,1, toreplace);
        }
        return(str);
}

使用它:

string replace = replaceinString(thisstring, " ", "%20");
string replace2 = replaceinString(thisstring, " ", "-");
string replace3 = replaceinString(thisstring, " ", "+");