10-3. 字符串逆序(15)
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。
输入样例:
#include<stdio.h>
#include<string.h>
char s[81];
int main(void)
{
gets(s);
char *p=s;
while(*(p+1)!='\0')//挪到最后一位
{
p ++;
}
//挨个打印
while(1)
{
printf("%c",*p);
p --;
if(p==s)
{
printf("%c",*p);
break;
}
}
}
10-4. 字符串循环左移(20)
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
输入样例:
#include<stdio.h>
#include<string.h>
char s[101];
int main(void)
{
//控制台输入 s和 N
gets(s);
int n;
scanf("%d",&n);
int i,k;
char s1[101];
strcpy(s1,s);//s1=strcpy(s1,s) 会报错!!
//分割 前面 he
{
char *p=s1;
p[n]='\0';
printf("此时s1=%s\n",s1);
}
//分割 后半段
{
char *q=s;
k=strlen(s);
for(i=0;i<=k-n;i++)
{
q[i]=q[i+n];
}
q[i]='\0';
printf("此时s=%s\n",s);
}
//连接
strcat(s,s1);
printf("最后s=%s\n",s);
}
将字符串左移
k=strlen(s);
for(i=0;i<=k-n;i++)
{
q[i]=q[i+n];
}
q[i]='\0';
另一种方式
#include <stdio.h>
#include <string.h>
char str[103];
int main()
{
int i, k, n;
gets(str);
k = strlen(str);
scanf("%d", &n);
if ( n % k == 0 )
puts(str);
else
{
for ( i=n%k; i<k; i++ )//i=2%12 i=2 从第二位开始打印
{
printf("%c", str[i]);
}
for ( i=0; i<n%k; i++ )
{
printf("%c", str[i]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <string.h>
char str[103];
int main()
{
int i, k, n;
gets(str);
k = strlen(str);
scanf("%d", &n);
if ( n % k == 0 )
puts(str);
else
{
for ( i=n; i<k; i++ )//如果等于k 打印就会一直有一个空格
//打印到k-1 就对了
{
printf("%c", str[i]);
}
for ( i=0; i<n; i++ )//如果等于n 打印会多打印一位
{
printf("%c", str[i]);
}
printf("\n");
}
return 0;
}