c语言 如何将一个字符串的前n个字母后移至尾,其他的按顺序前移? c语言 如何将一个字符串的前n个字母后移至尾,其他的按顺序前...
C\u8bed\u8a00\u9898\uff1a\u5c06s\u4e32\u4e2d\u6240\u6709\u5b57\u7b26\u524d\u79fb\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u7b2c\u4e00\u4e2a\u5b57\u7b26\u79fb\u5230\u6700\u540e\u3002\u8c22\u8c22\u5e2e\u5c06s\u4e32\u4e2d\u6240\u6709\u5b57\u7b26\u524d\u79fb\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u7b2c\u4e00\u4e2a\u5b57\u7b26\u79fb\u5230\u6700\u540e\uff1a
intlen=strlen(s);
charc=s[len-1];
s[len-1]=s[0];
s[0]=c;
\u6269\u5c55\u8d44\u6599
\u5b57\u7b26\u4e32\u4e2d\u5b57\u6bcd\u987a\u5e8f\u524d\u79fb\uff0c\u5176\u4ed6\u5b57\u7b26\u987a\u5e8f\u540e\u79fb\u3002
#include
#include
#include
char*fun(char*s)
{
inti,j,k,n;
char*p,*t;
n=strlen(s)+1;
t=(char*)malloc(n*sizeof(char));
p=(char*)malloc(n*sizeof(char));
j=0;
k=0;
for(i=0;i<n;i++)
{
if(((s[i]>='A')&&(s[i]='a')&&(s[i]<='z')))
{
t[j]=s[i];
j++;
}
else
{
p[k]=s[i];
k++;
}
}
for(i=0;i<k;i++)
t[j+i]=p[i];
t[j+k]=0;
returnt;
}
intmain()
{
chars[80];
printf("Pleaseinput:");
gets(s);
printf("\nTheresultis:%s\n",s);
printf("\nTheresultis:%s\n",fun(s));
getchar();
getchar();
return0;
}
#include
#include //\u4e3a\u4e86\u4f7f\u7528memcpy\u3001strlen\u7b49\u5b57\u7b26\u4e32\u51fd\u6570
#define N 5
int main()
{
char a[] = "abcdefghijk";
int i, j, m;
char b[N+1] = {'\0'};//b\u5c06\u6210\u4e3a\u4e00\u4e2a\u4e2d\u95f4\u50a8\u5b58\u6570\u7ec4
memcpy(b, a, N);//\u628aa\u7684\u524dN\u4e2a\u5b57\u7b26\u590d\u5236\u5230b\u4e2d\uff0c\u5b58\u8d77\u6765\uff0c\u4ee5\u4f9b\u540e\u9762\u4f7f\u7528
m = strlen(a)+1;//\u5f97\u51faa\u6570\u7ec4\u7684\u957f\u5ea6
for(i=0,j=N; j<m; i++,j++)
{
a[i] = a[j];//\u524dN\u4e2a\u5b57\u7b26\u4e4b\u540e\u7684\u5b57\u7b26\u201c\u6309\u987a\u5e8f\u524d\u79fb\u201d
}
strcat(a, b);//\u628ab\u8ffd\u52a0\u5230a\u540e\u9762\uff0c\u8fbe\u6210\u201c\u524dn\u4e2a\u5b57\u6bcd\u540e\u79fb\u81f3\u5c3e\u201d
printf(a);
return 0;
}
#include <string.h>//为了使用memcpy、strlen等字符串函数
#define N 5
int main()
{
char a[] = "abcdefghijk";
int i, j, m;
char b[N+1] = {'\0'};//b将成为一个中间储存数组
memcpy(b, a, N);//把a的前N个字符复制到b中,存起来,以供后面使用
m = strlen(a)+1;//得出a数组的长度
for(i=0,j=N; j<m; i++,j++)
{
a[i] = a[j];//前N个字符之后的字符“按顺序前移”
}
strcat(a, b);//把b追加到a后面,达成“前n个字母后移至尾”
printf(a);
return 0;
}
int i,j,k; char temp;
for(j=0;j<m;j++){
temp=w[j];//此处有误,每次循环时j都比之前+1,但是按你的逻辑此处应该是首字母
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
w[N-1]=temp;
}
你的逻辑是这样:
假如字符串是abcdefgh,要将前三个字母移至末尾,则要经过
1.bcdefgha,在这一步,也就是temp=w[0];
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
所达到的;
2.第二步进行之前,字符串是bcdefgha,要将b后移,显然应该将b存成temp,b后面的前移,
所以第二步依然是
temp=w[0];
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
以达到
cdefghab;
3,同样把c暂存,c后面前移,则获得最后要得到的字符串defghabc。
所以只需要把我在程序中标出的语句改了就可以运行了。
【另外:在
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
此处其实k和i的作用一样,没有必要用两个变量,可合二为一:
for(i=0;i<=N-1,k<=N-2;i++)
w[i]=w[i+1];
(1)按你的逻辑
int len = strlen(w);
for (i=0;i<m;i++) {
temp = w[0];
for (j=0;j<len-1;j++) w[j] = w[j+1];
w[len] = temp;
}
(2)char a[100],b[100];
strncpy(a,w,m);
strncpy(w,w[m+1],len-m);
strncpy(w[m+1],a,m);
#include <iostream>
using namespace std;
int main()
{
char buf[32]={0};
cin >> buf;
int len = strlen(buf);
int n ;
cin >> n;
char* p = buf;
char* q = p+len;
for(int i=0;i<n;i++)
{
*(q++)=*(p++);
}
q=p;
*(--q)='\0';
cout << p ;
}
是不是要这样子?
扩展阅读:c#截取字符串中的一部分 ... c++ 定义字符串 ... c 怎么输入一个字符串 ... c语言 字符串长度 ... 字符串顺序颠倒方法 ... 字符串相加 c ... 截取字符串的三种方法 ... c#字符串拼接 ... c 如何比较字符串的大小 ...