刷题笔记2——将字符串中的空格替换为指定的字符串

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

1、方法1

通过一个string对象来将元素不断加入其中,加完以后找出空格,删除即可

内容介绍1

string转char*的方法c_str(),返回一个指向正规C字符串的指针,内容与本string串相同

注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针

c_str()例子

char* c; 
string s="1234"; 
c = s.c_str();  //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
 
应该这样用: 
char c[20]; 
string s="1234"; 
strcpy(c,s.c_str()); 	// 这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作

内容介绍2

erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

测试代码

class Solution {
public:
	void replaceSpace(char *str,int length) {
        std::string res;
        std::string tmp = "%20";
        for(int i = 0; i < length; ++i) {
            if(str[i] == ' ')
                res += tmp;
            res += str[i];
        }
        for(int i = 0; i < res.size(); ++i) {
            if(' ' == res[i])
                res.erase(i, 1);
        }
        strcpy(str, res.c_str());
	}
};

2、方法2

在这里插入图片描述

class Solution {
public:
	void replaceSpace(char *str,int length) {
        int cnt = 0;
        char *tmp = str;
        while(*tmp != '\0'){
            if(*tmp == ' ')
                cnt++;
            tmp++;
        }
        
        int newLength = length + 2*cnt;
        str[newLength] = '\0';
        char *p_srcEnd = str + length -1;
        char *p_newEnd = str + newLength -1;
        while(p_srcEnd != p_newEnd){
            if(*p_srcEnd != ' ') {
                *p_newEnd-- = *p_srcEnd--;
            } else {
                *p_newEnd-- = '0';
                *p_newEnd-- = '2';
                *p_newEnd-- = '%';
                p_srcEnd--;
            }
        }
	}
};

猜你喜欢

转载自blog.csdn.net/CSDN_dzh/article/details/83794851
今日推荐