


























|
函数练习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;
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。