字符串 - 排序¶
小写字母排在大写字母的前面¶
有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法 c 语言函数原型:
void proc(char *str)
分析:
比如:HaJKPnobAACPc,要小写字母前面且不要求保存顺序,可以是:anobcHJKPAACP
- 小写字母 a~z 的 ASCII 码值是 97~122,A~Z 的 ASCII 码值是 65~90;0~9 的 ASCII 码是 48~57
- 两边向中间扫描,左边大写右边小写就交换;如果都小写,头指针向前知道找到大写;如果都是大写,尾指针向后找小写;
示例代码
char *proc(char *str){
char *start = str;
char *end = str;
if (str == NULL) return NULL;
while(*end != '\0') end++;
end--;
while(start < end){
if (*start >= 'A' && *start <= 'Z'){//大写
if (*end >= 'a' && *end <= 'z'){
char tmp = *start;
*start = *end;
*end = tmp;
start++;
}
end--;
}else{//小写
if (*end >= 'A' && *end <= 'Z'){
end--;
}
start++;
}
}
return str;
}