1.一个换一个
函数将字符串中的字符 '* ’ 移到字符串的前部分,前面的非 ’ * ’ 字符后移,但不能改变非 '* ’ 字符的先后顺序,函数返回串中非 ’ * ’ 字符的数量。(要求尽可能的占用少的时间和辅助空间)。
例如:原始串为 au ** toc ** h**i * ps,处理后为*******autochips ,函数返回9.
void OneReplace(char *arr)
{
int len = 0;//字符串的长度
while(arr[len] != '\0')
{
len++;
}
int i = len;//后面的*
int j = len;//前面查看是否是数字
while(arr[j] != '*')
{
j--;
i--;
}
while(j >= 0)
{
if(arr[j] == '*')
{
j--;
}else
{
arr[i] = arr[j];
arr[j] = '*';
i--;
}
}
}
void Move(char *str)
{
int i = strlen(str);
int j = i;
for(; i > 0; i--)
{
if(str[i] != '*')
{
str[j] = str[i];
j--;
}
}
while(j >= 0)
{
str[j--] = '*';
}
}
2.一个换多个(插入)
实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“we are happy”,则输出“we%20are%20happy”
void Replace(char *arr)
{
if(arr == NULL)
return ;
int arrLen = 0;//原来的字符串长度
int arr0Len = 0;//字符串空格的长度
int i=0;
while(arr[i]!='\0')
{
++arrLen;
if(arr[i]==' ')
{
++arr0Len;
}
++i;
}
int newLen = arrLen + arr0Len*2;//把空格替换成20%的字符串长度
while(arrLen >= 0 && newLen > arrLen)
{
//遇到空格时,替换成20%
if(arr[arrLen] == ' ')
{
arr[newLen --] = '0';
arr[newLen --] = '2';
arr[newLen --] = '%';
}
else
{
arr[newLen --] = arr[arrLen];
}
--arrLen;
}
}
3.多个换一个(删除)
将字符串中连续的空格删除,只保留一个空格"a b c d"->“a b c d”
void ManyReplace(char *arr)
{
int i = 0;
int j = 0;
while(arr[i] != '\0')
{
if(arr[i] != ' ')
{
arr[j] = arr[i];
i++;
j++;
}
else if(arr[i] == ' ' && arr[i+1] != ' ')
{
arr[j] = arr[i];
i++;
j++;
}
else if(arr[i] == ' ' && arr[i+1] == ' ')
{
i++;
}
}
arr[j] = '\0';
}