题目:要求写一个函数,将字符串中的空格替换为%20。
样例: “abc defgx yz” 转换成 “abc%20defgx%20yz”
一.创建新的字符串
根据题目要求,我们可以创建两个字符串,一个字符串用来放原字符串,另一个可以遍历后成新的字符串。新的字符串就是将旧的字符串里面的空格改成%20。
这种算法也比较简单就是单纯的从前面往后面遍历,遇见空格就改成%20。
具体代码如下:
void repace(char arr[], char arr1[])
{
int i = 0;
int j = 0;
for (i = 0; arr[i] != '\0'; i++)
{
if (arr[i] == ' ')
{
arr1[j++] = '%';
arr1[j++] = '2';
arr1[j] = '0';
}
else
{
arr1[j] = arr[i];
}
j++;
}
}
二.原来字符串改动
第二种算法不用创建新的字符串,就是在原来的字符串上修改。我们需要求出原来字符串的长度,再求出空格的数量,新的字符串的长度就原来字符串的长度加上空格数量的二倍。
然后从旧字符串的最后一个先前遍历,遇见空格就倒序输出%20;
具体代码如下:
void repace(char str[])
{
int oldnum = 0; //老的数量
int newnum = 0; //新的数量
int old = 0; //老的最后一个字符
int new = 0; //新的最后一个字符
int kong = 0; //空格的数量
while (str[oldnum] != '\0')
{
if (str[oldnum] == ' ')
{
kong++;
}
oldnum++;
}
newnum = oldnum + kong * 2;
old = oldnum -1 ;
new = newnum - 1;
while (old >= 0)
{
if (str[old] == ' ')
{
str[new--] = '0';
str[new--] = '2';
str[new] = '%';
}
else
{
str[new] = str[old];
}
old--;
new--;
}
}
三.整体代码
第一个整体代码:
#include<stido.h>
void repace(char arr[], char arr1[])
{
int i;
int j = 0;
for (i = 0; arr[i] != '\0'; i++)
{
if (arr[i] == ' ')
{
arr1[j++] = '%';
arr1[j++] = '2';
arr1[j] = '0';
}
else
{
arr1[j] = arr[i];
}
j++;
}
}
int main()
{
char arr[20] = "abc defgx yz";
char arr1[30] = { 0 };
repace(arr, arr1);
printf("%s\n", arr1);
return 0;
}
第二个整体代码:
#include<stdio.h>
void repace(char str[])
{
int oldnum = 0; //老的数量
int newnum = 0; //新的数量
int old = 0; //老的最后一个字符
int new = 0; //新的最后一个字符
int kong = 0; //空格的数量
while (str[oldnum] != '\0')
{
if (str[oldnum] == ' ')
{
kong++;
}
oldnum++;
}
newnum = oldnum + kong * 2;
old = oldnum -1 ;
new = newnum - 1;
while (old >= 0)
{
if (str[old] == ' ')
{
str[new--] = '0';
str[new--] = '2';
str[new] = '%';
}
else
{
str[new] = str[old];
}
old--;
new--;
}
}
int main()
{
char arr[20] = "abc defgx yz" ;
repace(arr);
printf("%s\n", arr);
return 0;
}
|