編寫一函數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<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;
}
#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;
}