将一个仅由大小写字母组成的字符串中所有小写字母排在大写字母的前面,输出重新排列后的结果字符串。

2024-12-04 20:58:12
推荐回答(2个)
回答1:

#include
#include

void sort(char *str)
{
char *cur,*mark=NULL;/*当前位置cur,第一次出现大写的位置mark*/
for ( ; *str ; str++)
{
if (*str>='A' && *str<='Z')/*遇到大写字母*/
{
if (mark==NULL)/*为空表示第一个遇到的大写字母,不为空表明已经赋过值,即不是第一次遇到的*/
mark=str;/*给第一个遇到的大写字母做个标记*/
}
else
{
if (mark)/*如果标记不为空,表明前面遇到过大写字母。如果前面一直是小写,则mark肯定为空*/
{
for (cur=str; cur>mark; cur--)/*将遇到的小写字母移到所有大写字母的前面。*/
{
*cur=*cur^*(cur-1);/*将前后的值交换,想冒泡排序一样,把小写字母移至大写字母前面*/
*(cur-1)=*cur^*(cur-1);
*cur=*cur^*(cur-1);
}
str=mark;
mark=NULL;/*将标记置空,待遇到下一个大写字母,再进行标记*/
}
}
}
}

void main()
{
char str[100]="DAadfaEEEdafDEGAjkdDeFadgeafDARGdafkjk";
puts(str);
sort(str);
puts(str);
}

/*用的C语言语法,已在VC++运行通过*/

回答2:

可以用ASCII码试试,强制转换后 大于等于90的 依次前移 其余不变 就可以了吧 如果不知道ASCII码 可以网上搜一个完整版