天之道

享受编程的乐趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

左移n个字符串

Posted on 2012-08-12 14:14 hoshelly 阅读(873) 评论(0)  编辑 收藏 引用 所属分类: Programming
编写一函数strlshif(char *s, int n),其功能是把字符串s中的所有字符左移n个位置,字符串中的前n个字符移到最后。

代码测试通过:


#include<stdio.h>
#include<string.h>
void strlshif(char *s, int n);
void main()
{
    char str[]="0123456789";
    strlshif(str,3);
    printf("%s\n",str);
}

void strlshif(char *s, int n)
{
    int i,len;
    char ch;
    len=strlen(s);
    for(i=0;i<n;i++)
    {
        ch=s[0];
        strncpy(s,s+1,len-1);
        s[len-1]=ch;
    }
}

那么若是不用strncpy函数功能,如何使指定的字符串左移n位?
代码测试通过,如下:

#include<stdio.h>
#include<string.h>
int main()
{
    char str[]="0123456789";
    char sstr[80]={0}; //使用一数组储存移动后的字符串
    char *p;
    int c,j;
    static int i,n;
    p=&str[0];
    printf("input the number: \n");
    scanf("%d",&n); //输入要左移的前n个字符,即将这n个字符移动到最后面
    c=n;
    while( c-- && p++ ); //找到没有移动过的剩下的全部字符,把它们储存在数组sstr 中

        for(i=0;i<strlen(str)-n;i++)
        {
            sstr[i]= *p;
            p++;
        }
        p=&str[0];  //指针指向第一个字符
        for(j=i;j<strlen(str);j++) //将要移动的字符一个一个地“接”到数组sstr后面
        {
            sstr[j]= *p;
            p++;
        }
        sstr[j]='\0'; //最后字符串结尾用'\0'
        printf("%s",sstr);  
        return 0;
}



        

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理