注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

字符串操作的C++程序练习  

2014-03-30 21:41:08|  分类: C & C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

网友问我的计算机二级的一个考试题目,由于很久没有好好地学习和使用C++了,都快忘记的差不多了,趁这个当口练习一下,温习一下。

题目是这样的:

假定输入的字符串中只包含‘*’和字母,编写一个函数,将字符串中的前导‘*’移动到字符串的最后面,例如输入字符串为“***A*B**C*D**”,则经过函数操作之后,前导的三个’*‘移动到字符串最后,变为“A*B**C*D*****”。

我的代码如下:

#include <iostream>
#include <string.h>
using namespace std;

void PickChars(char* a);

int main()
{
    char s[81]="*****ASKDHFKSHF***ASDAH*";  
    int n=0;
    PickChars(s);
    cout<<s<<endl;
    return 0;
}

void PickChars(char* a)
{
    char *p,*q;
    int n=0;
    p=a;
    while(*p=='*')  /* 统计串头'*'个数n */
    {n++; p++;}
    q=a;
    //your code here
    //////////////////////////////////////////
    while(*p!='\0')
        *q++=*p++;
    //////////////////////////////////////////
    for(;n>0;n--)  /* 在串尾补n个'*' */
        *q++='*';
    *q='\0';  
}
事实上我一开始还把题目看错了,误以为是把所有的‘*’都移动到后面去,字母提前,但是相对顺序不变,这个要求稍显麻烦,不过也不是太难,下面是实现该要求的函数。
void PickChars(char* a)
{
    char *p,*q;
    int n=0;
    p=a;
    q=a;
    while(*p!='\0')
    {
        if(*p!='*')
            *q++=*p++;
        else
        {
            p++;
            n++;//统计所有的‘*’
        }
    }
    for(;n>0;n--)/* 在串尾补n个'*' */
        *q++='*';
    *q='\0';  
}

  评论这张
 
阅读(427)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016