Posted on 2012-08-12 14:14
hoshelly 閱讀(940)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
Programming
編寫(xiě)一函數(shù)strlshif(char *s, int n),其功能是把字符串s中的所有字符左移n個(gè)位置,字符串中的前n個(gè)字符移到最后。
代碼測(cè)試通過(guò):
#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函數(shù)功能,如何使指定的字符串左移n位?
代碼測(cè)試通過(guò),如下:
#include<stdio.h>
#include<string.h>
int main()
{
char str[]="0123456789";
char sstr[80]={0}; //使用一數(shù)組儲(chǔ)存移動(dòng)后的字符串
char *p;
int c,j;
static int i,n;
p=&str[0];
printf("input the number: \n");
scanf("%d",&n); //輸入要左移的前n個(gè)字符,即將這n個(gè)字符移動(dòng)到最后面
c=n;
while( c-- && p++ ); //找到?jīng)]有移動(dòng)過(guò)的剩下的全部字符,把它們儲(chǔ)存在數(shù)組sstr 中
for(i=0;i<strlen(str)-n;i++)
{
sstr[i]= *p;
p++;
}
p=&str[0]; //指針指向第一個(gè)字符
for(j=i;j<strlen(str);j++) //將要移動(dòng)的字符一個(gè)一個(gè)地“接”到數(shù)組sstr后面
{
sstr[j]= *p;
p++;
}
sstr[j]='\0'; //最后字符串結(jié)尾用'\0'
printf("%s",sstr);
return 0;
}