16.替换空格

https://blog.csdn.net/jisuanji198509/article/details/95238355

于是想要将一个char转换为string只能找其他间接的方法了,这里提供几种:

//1、构造函数里有个string(size_t,char)
char x = 'a';
string s(1,x);
//2、string初始化没char,但是push_back可以
string s;
s.push_back(x);
//3、string可以由char*初始化
char xx[2] = {x,0};
string s(xx)

题解:链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
来源:牛客网

分析:先转为string,然后处理完成后再转为char *。但不是以返回值的形式,还要利用好原来的空间,用strcpy实现之。

处理过程循环查找,每次找到就替换,且把每次的找到的结果当成下一次的参数,避免重复从头查找。

代码

class Solution {
public:
    void replaceSpace(char *str,int length) {
        string s(str);
        int i=0;
        while((i=s.find(' ',i))>-1){
            s.erase(i,1);
            s.insert(i,"%20");
             
        }
        auto ret=s.c_str();
        strcpy(str,ret);
    }
};

https://www.cnblogs.com/ryanzheng/p/8998047.html

我们经常会使用C和C++的混合编程,在某些情况下,需要将C++的string,转换成char* 的字符串。下面说两种可行的方法,作为总结。

1. data();

如:

string str="abc";
char*p=(char*)str.data();

2.c_str();

如:

string str="adcd";

char *p=(char*)str.c_str();

暂时就记这两种吧,简单而且差不多够用了。

class Solution {
public:
    void replaceSpace(char *str,int length) {
       // if(str == NULL) return ;
        string sd;
        string res(str);//s()将char* 变成string 
        for(int i=0;i<res.length();i++)
        {
            if (res[i] == ' ') sd += "%20";
            else sd += res[i];
        }
        char *ret= (char *)sd.c_str();//将string转换成char *
        strcpy(str,ret);

    }
}; 

函数关键字:strcpy
使用格式:char* strcmp(char* buffer,char*str)
功 能: 把从str地址开始且含有NULL结束符的字符串复制到以buffer开始的地址空间,buffer地址空间中必须有足够的空间来容纳str的字符串

class Solution {
public:
    void replaceSpace(char *str,int length) {
       // if(str == NULL) return ;
        string buffer;
        string res(str);//s()将char* 变成string 
        for(int i=0;i<res.length();i++)
        {
            if (res[i] == ' ') buffer += "%20";
            else buffer += res[i];
        }
        char *ret= (char *)buffer.c_str();//将string转换成char *
        strcpy(str,ret);

    }
}; 

我们经常会使用C和C++的混合编程,在某些情况下,需要将C++的string,转换成char* 的字符串。下面说两种可行的方法,作为总结。

1. data();

如:

string str="abc";
char*p=(char*)str.data();

2.c_str();

如:

string str="adcd";

char *p=(char*)str.c_str();

暂时就记这两种吧,简单而且差不多够用了。

class Solution {
public:
    void replaceSpace(char *str,int length) {
       // if(str == NULL) return ;
        string sd;
        string res(str);//s()将char* 变成string 
        for(int i=0;i<res.length();i++)
        {
            if (res[i] == ' ') sd += "%20";
            else sd += res[i];
        }
        char *ret= (char *)sd.c_str();//将string转换成char *
        strcpy(str,ret);

    }
}; 

函数关键字:strcpy
使用格式:char* strcmp(char* buffer,char*str)
功 能: 把从str地址开始且含有NULL结束符的字符串复制到以buffer开始的地址空间,buffer地址空间中必须有足够的空间来容纳str的字符串

class Solution {
public:
    void replaceSpace(char *str,int length) {
       // if(str == NULL) return ;
        string buffer;
        string res(str);//s()将char* 变成string 
        for(int i=0;i<res.length();i++)
        {
            if (res[i] == ' ') buffer += "%20";
            else buffer += res[i];
        }
        char *ret= (char *)buffer.c_str();//将string转换成char *
        strcpy(str,ret);

    }
}; 

猜你喜欢

转载自www.cnblogs.com/make-big-money/p/12359381.html