题目:字符串内容重排序。实现对给定字符串(字符串中包含英文字母、数字、符号),经过处理后的字符串按照"字母、数字、符号"的顺序存放。要求是不改变字母、数字等在原串中先后次序例如字符串"A,2.d?3!e4r87we79",处理后输出结果为"Aderwe2348779,.?!"
分析:
方法(1):逐次扫描原串,是字母的放在一个动态开辟的地方,是数字的放在另一块地方是其它字符的再放在另一块地方,最后将这三部分按顺序拷贝到str中,保证字母在前数字在中间,最后是字符,而且同类字符的相对次序保持不变。
void parse_string1(char* str)
{
assert(str);
int len = strlen(str);
char* a = new char[len];
char* b = new char[len];
char* c = new char[len];
int i = 0;
int j = 0;
int k = 0;
char* ret = str;
while (*str != '\0')
{
if (isalpha(*str))//如果是字母
{
a[i] = *str;
i++;
str++;
}
else if (isdigit(*str))//如果是数字
{
b[j] = *str;
j++;
str++;
}
else
{
c[k] = *str;
k++;
str++;
}
}
str = ret;
strncpy(str, a, i);
strncpy(