#include <stdio.h>
#include <string.h>
void RightLoopMove(char *s)
{
int i = 0;
int t = 2;
int l;
l = strlen(s); // 取字符串长度
while(t--)// 字符串右移2次
{
char *pend = s + l - 1;
char tmp = *(s + l - 1);
while (s <= pend)
{
*pend = *(pend - 1);
pend--;
}
*s = tmp;
}
}
int main(){
char s[26];
scanf("%s",s);
printf("%s\n",s);
int l;
l = strlen(s);
for(int i = 0; i < l-1; i++){
RightLoopMove(s);
printf("%s\n",s);
}
return 0;
}
char *pend = s + l - 1;
为什么char *pend 后面是字符串加上整数
还有这句
char tmp = *(s + l - 1);
以及这个循环是为什么能够成立
字符串之间的比较怎么限定
while (s <= pend)
{
*pend = *(pend - 1);
pend--;
}
供参考:
char *pend = s + l - 1; 首先 char *pend,这里定义一个指针变量 pend
s是形参 char *s ,也是一个指针变量,因为是形参,主函数传过来的是字符串s的首地址
l=strlen(s),l 就得到了字符串的长度值
pend = s + l -1 ==>就让 pend 指针指向了字符串 s 的尾部。
char tmp = *(s + l - 1); char tmp ,这里定义了一个字符变量 tmp
(s + l - 1)这个的意思和上面相同,这个地址值就是字符串 s 的最末尾的地址
*(s + l - 1),前面加 ‘*’,就是取得括号(地址)里的值
tmp = *(s+l-1)==>就是把 字符串 s 最末位的字符赋值给 tmp
while (s <= pend) s是字符串首地址,其实就是一个数字,我们假定这个数字为 0 ,pend 是字符串末地址,我们假定
它为 6,while(0 <= 6 )这个条件成立,就可以循环了。然后,在循环体里,每次我们让s保持
不变,而让 pend 每次减一,6 一直减 到 -1 时,while(s <= pend)条件不满足了,退出循环。