惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
V2EX
GbyAI
GbyAI
量子位
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
O
OpenAI News
N
News and Events Feed by Topic
博客园 - Franky
爱范儿
爱范儿
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
Last Week in AI
Last Week in AI
罗磊的独立博客
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
J
Java Code Geeks
I
Intezer

博客园 - Arishuang

数据类型 varchar 和 varchar 在 modulo 运算符中不兼容。 ASP.NET2.0_多语言本地化应用程序 ASP.NET2.0_缓存 ASP.NET2.0_执行页面发送的强类型方法与弱类型方法 ASP.NET中的状态管理功能详解(转载) [ASP.NET] Session 详解(转载) ASP.NET页面下载功能程序(转载) vs2005中“密码最短长度为7,其中必须包含以下非字母数字字符: 1”错误 (转载) ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie (转载) - Arishuang ASP.NET页面跳转的几种方法(转载) 常用正则表达式(转载) C#_解决在控制台中输入Ctrl+Z的问题 C#格式化输出(转载) C#格式化输出 面试题之金山_函数练习3_数值转换并输出数值中各个数字的个数(从低位到高位,输出转换后数值的各个数字个数) DS_汉诺塔 XML_(3)_用C#操作缓存中的XML即DOM 观书后感之"NET Web Services:架构与实现 (美)贝列哲 "2008-5-2 下定决心,认定了,就全力以赴.Web应用程序开发--跟你杠上了
面试题之金山(函数练习2)_字符排序(字母、数字及其它字符)ParseString
Arishuang · 2008-05-10 · via 博客园 - Arishuang

函数练习2

写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理。经过处理后的字符串其内容按字母,数字,符号的顺序存放。函数声明如下:
void ParseString(char* pstr);
要求:
a. 不能改函数声明;
b. 不改变字母数字等在字符串中原有的出现顺序;
c. 直接使用pstr所值指缓冲区,不允许另开缓冲区。
例如:给定的字符串为:A,2.d?3!e4r87we79...
输出结果为:Aderwe2348779,.?!...

在解这道题时,自己想了一下.一开始的想法是先判断字符串里的字母,若是字母就不管,否则就把这个字符取出,而此字符后的所有字符均向前移.如此,就把取出的字符放在字符串的最后一个空间上.
但想法是出来了,当在写代码的时候,却死活都不知怎样下手.于是,上网找下,果然在一个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;
}