面试题之金山(函数练习2)_字符排序(字母、数字及其它字符)ParseString
函数练习2
|
写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理。经过处理后的字符串其内容按字母,数字,符号的顺序存放。函数声明如下: |
但想法是出来了,当在写代码的时候,却死活都不知怎样下手.于是,上网找下,果然在一个blog中找到了一份.心里高兴啊!马上下来试下.可是结果是只能把字母,数字及其它字符区分开来而已,原来的出现顺序已乱了.
于是,还是自己做吧.欲求别人,还不如自己动手.俗称自己动手丰衣足食吗!!!
终于,想出了个比第一次自己想出的方法还好的算法,如下:
A , 2 d ? 3 !
1)先依次判断是否为字母,若是,则先取出此字母,而其前的字符到上个字母的后的字符,都依次先后移一步.
2)对应于数字就是把判断函数改下而已,具体的代码在最下:
编程总结:
在这条编程题目中,我发现自己的字符串数组还不是很熟悉.一个char* sptr函数参数,其在main()中不就是一个char数组而已
,且ParseString(char* sptr)的调用函数是ParseString(s),s为char[] .在函数中可直接用索引来调用数组中的某个值.
而最大的收获莫过于,发现自己的编写代码能力很差.其原因应该是少练习,且基础不扎实.我想解决的方法是坚持练习及复习,
做总结.
#include <stdio.h>
#include <string.h>
void ParseString(char* pstr)
{
char tempCh;
int i=0,j=0,k=0;
//计数器 i表示算到第几个字符了 j表示有几个字母(或数字)了 而k用于移动字符时的计数器
while(pstr[i]!='\0')
{
if(isalpha(pstr[i])) //若是字母,则先取出,再将其前到上个字母的字符都向后移一位,最后放在上个字母后
{
tempCh=pstr[i];
for(k=i;k>=j;k--)
{
pstr[k]=pstr[k-1];
}
pstr[j]=tempCh;
j++;
}
i++;
}
i=j; //字母全放好了,有几个字母,我们就从第几个字符开始计数,因只剩下数字和其它字符没有排序而已
while(pstr[i]!='\0')
{
if(isdigit(pstr[i]))
{
tempCh=pstr[i];
for(k=i;k>=j;k--)
{
pstr[k]=pstr[k-1];
}
pstr[j]=tempCh;
j++;
}
i++;
}
}
int main()
{
char s[100];
scanf("%s",&s);
ParseString(s);
printf("%s",s);
//scanf("%s",&s);
return 0;
}