|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
给定一个字符串长度为 nn 的字符串 s1 (10 < n < 10010<n<100) , 求出将字符串循环向左移动 k位的字符串 s2 (1 < k < n1<k<n) , 例如:字符串 abcdefghijk , 循环向左移动 33 位就变成 defghijkabc
输入描述
输入仅两行,第一行为左移的位数 k, 第二行为字符串 s1 .
输出描述
输出仅一行,为将字符串 s1 左移 k 位得到的字符串 s2 .
样例输入
Copy to Clipboard
3
abcdefghijk
样例输出
Copy to Clipboard
defghijkabc
问题:请问我的代码为什么没有结果
代码:
#include<stdio.h>
#include<string.h>
void inversion(char *p,int start,int end)
{
char temp;
while(start<end)
{
temp=p[start];
p[start]=p[end];
p[end]=temp;
++start;
--end;
}
}
void shift(char *p,int n)
{
int len=strlen(p);
n%=len;
inversion(p,0,n-1);
inversion(p,n,len-1);
inversion(p,0,len-1);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char ini_str[100];
int i=0;
for(i=0;ini_str[i]!='\0';i++)
{
scanf("%s",&ini_str[i]);
}
int len=strlen(ini_str);
shift(ini_str,n);
for(i=0;i<len;i++)
{
printf("%s\n",ini_str[i]);
}
}
return 0;
}
本帖最后由 jhq999 于 2022-5-24 21:20 编辑
- void inversion(char *p,int len,int n,int isleft=1)
- {
- char temp1,temp2;
- for (int i = 0,j=0,temp1=p[0]; i < len; i++)
- {
- int k;
- //if(isleft)k=j<n?len-n+j:j-n;
- if(isleft)k=(len-n+j)%len
- else
- k=(j+n)%len;
- temp2=p[k];
- p[k]=temp1;
- temp1=temp2;
- j=k;
- }
-
-
-
- }
- int main()
- {
- int n;
- while(scanf("%d",&n)!=EOF)
- {
- char ini_str[100];
- int i=0;
- scanf("%s",ini_str);
-
- int len=strlen(ini_str);
- inversion(ini_str,len,n);
- printf("%s\n",ini_str);
-
- }
- return 0;
- }
复制代码
|
|