题目链接地址:
题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
输入:
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
输出:
对应每个测试案例,出经过处理后的字符串。
样例输入:
We Are Happy
样例输出:
We%20Are%20Happy
解题思路:
这道题的意思就是输入一个字符串,然后将该字符串中出现的空格全部替换为“%20”。我的想法是把输入的字符串存储到一个字符数组中,并且得到输入字符串的长度lenOfInputString,然后再动态申请一片大小为3 * lenOfInputString + 1的内存用于存放替换空格后所得到的字符串, (为什么替换空格后所得到的字符串的长度要设置为3 * lenOfInputString + 1 ?因为一个空格转换成“%20”后长度就变成了原来的3倍,如果输入的字符串中都是空格,那么转换空格后所得到的字符串的长度就是原来输入字符串长度的3倍,而C语言中的字符串是以’\0’做为结束标志的,所以最后还要多开一个字节的空间用来存放’\0’。) 最后依次遍历输入字符串中的每个字符,如果被遍历的字符为空格,则在转换字符串中插入“%20”这3个字符,否则直接将输入字符串中被遍历的字符赋值给转换字符串所对应的字符。
AC代码如下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define MAXLEN 1000000
/**
* 将一个字符串中的空格替换成对应的字符串
* @param inputString 输入的字符串
* @param lenOfInputString 输入字符串的长度
* @param replaceSpaceString 替换空格的字符串 也就是"%20"
* @param lenOfReplaceSpaceString 替换空格字符串的长度
* @return outputString 替换空格后生成的字符串
*/
char * replaceSpace(char * inputString,int lenOfInputString,char * replaceSpaceString,int lenOfReplaceSpaceString)
{
//设置替换空格后所生成字符串长度为输入字符串的3倍 是为了考虑输入字符串中只包含空格这种特殊情况
char * outputString = (char *)malloc((3 * lenOfInputString + 1)* sizeof(char));
// i为遍历输入字符串的指针,j为遍历替换空格后所生成字符串的指针,t为遍历替换空格字符串"%20"的指针
int i = 0,j = 0,t = 0;
while(*(inputString + i) != '\0')
{
if(' ' != *(inputString + i))
{
*(outputString + j) = *(inputString + i);
j++;
}
else
{
for(t = 0;t < lenOfReplaceSpaceString;t++)
{
*(outputString + j) = *(replaceSpaceString + t);
j++;
}
}
i++;
}
*(outputString + j) = '\0';
return outputString;
}
int main()
{
char inputString[MAXLEN]; // 用于存放输入的字符串
char * outputString; // 用于存放替换空格后所得到的字符串
char * replaceSpaceString = "%20"; // 用于替换空格的字符串
fgets(inputString,sizeof(inputString),stdin);
outputString = replaceSpace(inputString,strlen(inputString),replaceSpaceString,strlen(replaceSpaceString));
printf("%s\n",outputString);
free(outputString);
return 0;
}
/**************************************************************
Problem: 1510
User: blueshell
Language: C
Result: Accepted
Time:10 ms
Memory:2112 kb
****************************************************************/