问题描述:
一个字符串只包含*和数字,请把它的*号都放在开头,且数字顺序不能交换!
方法一:
三次循环数组,第一次将数组中的*号赋给临时数组,第二次将数组中的数字赋给临时数组,第三次将临时数组中的元素赋给原数组!
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Function(char *arr, int len)
{
if (arr == NULL || len <= 1)
return;
char *temp = (char *)malloc(len + 1);
temp[len] = '\0';
int n = 0;//代表temp中第几个元素
for (int i = 0; i <= len; ++i)
{
if (arr[i] == '*')
temp[n++] = arr[i];
}
for (int i = 0; i <= len; ++i)
{
if (arr[i] != '*')
temp[n++] = arr[i];
}
for (int i = 0; i <= len; ++i)
arr[i] = temp[i];
}
void test1()
{
char arr[] = "1*2***3*44**55**690**";
Function(arr, strlen(arr));
printf("%s\n", arr);
}
int main()
{
test1();
printf("%s %s\n", __DATE__, __TIME__);
system("pause");
return 0;
}
***********1234455690
Aug 25 2016 17:32:38
请按任意键继续. . .
方法二
倒叙遍历
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
void Function(char *arr, int len)
{
if (arr == NULL || len <= 1)
return;
int j = len-1;
for (int i = len-1; i >= 0; --i)
{
if (isdigit(arr[i]))
arr[j--] = arr[i];
}
for (; j >= 0; --j)
arr[j] = '*';
}
void test1()
{
char arr[] = "12**34";
Function(arr, strlen(arr));
printf("%s\n", arr);
}
int main()
{
test1();
printf("%s %s\n", __DATE__, __TIME__);
system("pause");
return 0;
}
运行结果:
**1234
Aug 25 2016 18:17:33
请按任意键继续. . .