前言:本期是关于PTA-字符串循环左移的具体解法,今天你c了吗?
题目:
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
输入样例:
Hello World!
2
输出样例:
llo World!He
代码实现:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[1000] = { 0 };
gets(arr);
int n = 0;
scanf("%d", &n);
//字符串左移
int i = 0;
for (i = 0; i < n; i++)
{
//一次左移
char tmp = arr[0];
int j = 0;
int len = strlen(arr);
for (j = 0; j < len; j++)
{
arr[j] = arr[j + 1];
}
arr[len - 1] = tmp;
}
puts(arr);
return 0;
}
大致思路:
一次左移:
1.数组中的首元素先存入临时变量中,从第二个元素开始,整个字符串往前挪位置。
2.数组中的最后一个位置(整个字符串左移而空出来的)存入首元素。
tips:一次左移,将数组的首元素挪至数组的尾部位置
循环:用户输入的n决定左移的次数,若是n>1,左移2次及以上,利用for循环进行多次左移,可以实现多次将数组首元素位置上的字符移置整个字符串后面的效果。
代码解读:
part 1
char arr[1000] = { 0 };
gets(arr);
int n = 0;
scanf("%d", &n);
1.定义arr字符数组存储字符串
2.gets读入字符串,将其存入arr首字符数组中,gets读取字符串可以读取空格(优势)
part 2
int i = 0;
for (i = 0; i < n; i++)
{
//一次左移
char tmp = arr[0];
int j = 0;
int len = strlen(arr);
for (j = 0; j < len; j++)
{
arr[j] = arr[j + 1];
}
arr[len - 1] = tmp;
}
1.for循环来执行进行几次字符串左移
2.for循环内部是一次左移:
a. arr数组的首元素先存入临时变量中
b. 数组的第二个元素开始至数组的末尾,全部往前挪一个位置(后面的覆盖前面的)
c.挪完后数组的最后的一个下标所代表的空间空了出来,将存在临时变量中的首元素存入这个空出 来的位置里。
part 3
将改变后的字符串用puts输出
tips:gets和puts是一对,可以搭配用,专门用于字符串的输入和输出
本期完!