首页 > 代码库 > 替换空格

替换空格

题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入
"We are happy.",则输出"We%20are%20happy."。

思路:我们从字符串的后面复制和替换。首先准备两个指针,p1和p2。p1指向原字符串的末尾,p2指向替换之后的字符串的末尾。然后我们向前移动p1指针,逐个把它指向的字符复制到p2指向的位置,碰到空格就替换为"%20"。

代码如下:

#include <stdio.h>
 
void ReplaceBlank(char *s)
{
    char *t;
    char *tmp = s;
    int count = 0;   //总字符数(包括空格)
    int blank = 0;   //空格数
    int i = 0;
    if(*s == NULL)
        return;
    while(*tmp != ‘\0‘)
    {
        count++;
        if(*tmp == ‘ ‘)
            blank++;
        tmp++;
    }
	tmp--;
    t = tmp;  //保留原字符串末尾
		//We are happy.
 
    //替换空格后字符串总字符数为count = count + 2*blank
    count += blank<<1;
 
    //让tmp指向替换空格后字符串的末尾
    while(i<blank<<1)
    {
        tmp++;
        i++;
    }

	tmp++;
	*tmp = ‘\0‘;
	tmp--;
 
    //从后往前依次替换
    while(*t)
    {
        if(*t == ‘ ‘)
        {
            *tmp-- = ‘0‘;
            *tmp-- = ‘2‘;
            *tmp-- = ‘%‘;
            t--;
        }
        else
            *tmp-- = *t--;
    }
}
 
void print(char *s)
{
    char *tmp = s;
    while(*tmp != ‘\0‘)
    {
        printf("%c",*tmp);
        tmp++;
    }
	printf("\n");
}
 
int main()
{
    char c;
    char s[100];
    int i = 0;
    printf("请输入一个字符串:\n");
    scanf("%c",&c);
    while(c != ‘\n‘)
    {
        s[i++] = c;
        scanf("%c",&c);
    }
    s[i] = ‘\0‘;
 
    ReplaceBlank(s);
    print(s);
 
    return 0;
}


替换空格