字符串循环左移

输入一个字符串和一个非负整数N,要求将字符串循环左移N次。

输入格式:

输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。

输出格式:

在一行中输出循环左移N次后的字符串。

输入样例:

Hello World!
2

输出样例:

llo World!He


#include<stdio.h>
#include<string.h>

int main(){ char s[101],s2[101];
  int n;
  gets(s);
  char *p=s;
  scanf("%d",&n);
  n= n % strlen(s);//左移长度判断
  p=p+n;
  strcpy(s2,p);//标志右边的复制给s2
  //s2[n]=‘\0‘;
  *p=‘\0‘;//s修改成标志左边的字符串
  //strcpy(s,p);
  strcat(s2,s);//连接操作完成左移;
  puts(s2);
  return 0;
}

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. int main(void){
  5.     const int length_of_array = 101;                //定义数组长度 
  6.     char sentence[length_of_array];
  7.     char *temporary = (char*)malloc(sizeof(char)*length_of_array);   //临时内存空间 
  8.     int shift;                         //偏移量     
  9.     gets(sentence);
  10.     scanf("%d",&shift); 
  11.     int length_of_sentence = strlen(sentence);           //取得输入数据的长度    
  12.     if ( shift > length_of_sentence){                    //处理偏移量大于数据长度的情况 
  13.         shift = shift % length_of_sentence;
  14.     } 
  15.    
  16.     char *located_address = sentence + shift;  //该地址是“相对原始地址来说偏移shift后的地址 ”  
  17.      
  18.     strcpy(temporary,located_address);      //将偏移后地址的全部内容复制到临时容器中 
  19.     *located_address = ‘\0‘;          //将偏移后的地址对应的数据修改为‘\0‘供下面使用 
  20.     strcat(temporary,sentence);         //原始地址的数据内容直接追加到临时空间 
  21.         printf("%s",temporary); free(temporary);        
  22.     return 0;
  23. }

字符串循环左移

时间: 2024-10-25 06:41:17

字符串循环左移的相关文章

5-31 字符串循环左移 (20分)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次. 输入格式: 输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N. 输出格式: 在一行中输出循环左移N次后的字符串. 输入样例: Hello World! 2 输出样例: llo World!He #include <stdio.h> #include <stdlib.h> int main() { int N; int length = 0; char a[100],b[100];

*字符串-05. 字符串循环左移

1 /* 2 * Main.c 3 * D5-字符串-05. 字符串循环左移 4 * Created on: 2014年8月19日 5 * Author: Boomkeeper 6 ********部分通过******* 7 */ 8 9 #include <stdio.h> 10 11 int main(void){ 12 13 char str[100]={0}; 14 int N=0; 15 int endIndex=99;//字符串的结尾标识符 16 17 gets(str); 18

10-4. 字符串循环左移(20)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次. 输入格式: 输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N. 输出格式: 在一行中输出循环左移N次后的字符串. 输入样例: Hello World! 2 输出样例: llo World!He 1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 char str[101]; 7 int t; 8 gets

字符串-05. 字符串循环左移(20)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次. 输入格式: 输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N. 输出格式: 在一行中输出循环左移N次后的字符串. 输入样例: Hello World! 2 输出样例: llo World!He import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(St

7-31 字符串循环左移(20 分)

7-31 输入一个字符串和一个非负整数N,要求将字符串循环左移N次. 输入格式: 输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N. 输出格式: 在一行中输出循环左移N次后的字符串. 输入样例: Hello World! 2 输出样例: llo World!He AC代码 #include<stdio.h> #define max 105 int main(){ char s;//指单独一个字符 char t[max];//创建一个字符数组 int

《编程珠玑》笔记:数组循环左移

问题描述:数组元素循环左移,将包含 num_elem 个元素的一维数组 arr[num_elem] 循环左移 rot_dist 位.能否仅使用数十个额外字节的存储空间,在正比于num_elem的时间内完成数组的旋转? 一:Bentley's Juggling Alogrithm 移动变量 arr[0] 到临时变量 tmp,移动 arr[rot_dist] 到 arr[0],arr[2rot_dist] 到 arr[rot_dist],依此类推,直到返回到取 arr[0] 中的元素,此时改为从 t

【C语言】请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”

// 请实现字符串循环右移函数.列如字符串"abcdefghi"向右移2位就是"hiabcdefg" // 函数原型为:void RightLoopMove(char *pstr,unsigned short steps) #include <stdio.h> #include <assert.h> #include <string.h> void severse(char *p,char *q) //字符串翻转 { char t

从数组循环左移问题中浅谈考研算法设计的规范代码

问题:设将n(n>1)个整数存放到一维数组R中.设计一个算法,将R中的序列循环左移p(0<p<n)个位置,即将R中的数据由{X0,X1,...,Xn-1}变换为{Xp,Xp+1,...,Xn-1,X0,X1,...,Xp-1}.要求:写出本题的算法描述. 分析: 本题不难,要实现R中序列循环左移p个位置,只需先将R中前p个元素逆置,再将剩下的元素逆置,最后整体逆置操作即可.本题算法描述如下: 1 #include <iostream> 2 using namespace st

位操作——高低位交换(循环左移/右移)

给出一个16位的无符号整数.称这个二进制数的前8位为“高位”,后8位为“低位”.现在写一程序将它的高低位交换.例如,数34520用二进制表示为: 10000110 11011000 将它的高低位进行交换,我们得到了一个新的二进制数: 11011000 10000110 它即是十进制的55430. 这个问题用位操作解决起来非常方便,设x=34520=10000110 11011000(二进制) 由于x为无符号数,右移时会执行逻辑右移即高位补0,因此x右移8位将得到0000000010000110.