字符串左移(右移)

教C语言的XZW老师给经常迟到的CQW布置了一道难题:将字符串循环打印成n*n矩阵。这涉及到字符串的左移和右移算法。本文将介绍这两种算法并帮助CQW完成作业。
摘要由CSDN通过智能技术生成

A.CQW又迟到了
CQW是个坏学生,每天都迟到,从没看见他在第一节课出现过,懒惰的他,总是在点名的最后一刻出现。为了治一治他这个坏习惯,教C语言的XZW老师决定每天都给他布置一个单独的作业,并答应只要他每次都能正确完成作业就不点他的名字,CQW为了可以多睡觉,立刻答应了下来。为了让CQW知难而退,于是第一天XZW老师就布置了一个超级难的题!
将一个字符串循环打印输出成一个 n * n 的矩阵。
如输入:abcd
那么输出:
abcd
bcda
cdab
dabc
也就是说每次都将输出的上一个字符串的第一个字符移动到最后的位置形成新的字符串。
天哪!对于从来不上课的CQW同学来说这题实在是太难了。他听说你喜欢唱跳、rap和篮球,还练习了两年半的C语言,于是过来请求你的帮助,你可以帮帮他吗?

#include"iostream"
#include"string"
using namespace std;
int main()
{
   
 string str;
 int n;
 while(cin>>str)
 {
   
  int len=str.size();
  for
以下是一个简单的C语言程序,用于实现您所描述的功能。程序中包含了字符串的声明,以及根据输入的整数N进行左移右移的操作。 ```c #include <stdio.h> #include <string.h> #include <stdlib.h> // 函数声明 void rotateLeft(char *str, int n); void rotateRight(char *str, int n); int main() { // 声明并初始化字符串 char str[] = "Hello, World!"; int N; // 提示用户输入整数N printf("请输入一个整数N:"); scanf("%d", &N); // 检查N的值并进行相应操作 if (N > 0) { // 对字符串进行左移操作 rotateLeft(str, N); } else if (N < 0) { // 对字符串进行右移操作 rotateRight(str, -N); } else { printf("N等于0,无需移动。\n"); } // 输出移动后的字符串 printf("移动后的字符串为:%s\n", str); return 0; } // 函数定义 void rotateLeft(char *str, int n) { int len = strlen(str); // 使n对字符串长度取模,避免无效移动 n = n % len; // 临时存储要移动的部分 char temp[n + 1]; // 拷贝要移动的部分 memcpy(temp, str, n); // 将剩余部分左移 memmove(str, str + n, len - n); // 将原首部部分拷贝到字符串尾部 memcpy(str + len - n, temp, n); // 添加字符串结束符 str[len] = '\0'; } void rotateRight(char *str, int n) { rotateLeft(str, strlen(str) - (n % strlen(str))); } ``` 这段代码首先包含了必要的头文件,并声明了两个辅助函数`rotateLeft`和`rotateRight`分别用于左移右移字符串。`main`函数中首先声明并初始化了一个字符串,然后提示用户输入一个整数N,并根据N的值调用相应的函数进行字符串的移动操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值