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

该博客介绍了如何使用C++编程实现字符串的循环左移操作。通过输入一个字符串和一个非负整数N,程序将字符串左移N位。文章提供了两种实现方式,包括一个带有详细注释的版本和一个简化版,强调了strcat和strcpy等字符串函数的使用。此外,还对比了C++中更简洁的string库函数substr的使用方法。
摘要由CSDN通过智能技术生成

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

输入格式:

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

输出格式:

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

输入样例:

Hello World!
2

结尾无空行

输出样例:

llo World!He

结尾无空行

备注版:

#include<stdio.h>
#include <string.h>//string函数用于处理字符串
int main (){
	char s1[101];
	char s2[101];
	char s3[101];
	gets(s1);
	strcpy(s2,s1);//strcpy,把s1字符复制到s2上
	int n,m,len1,i,j;
	len1=strlen(s1);
	scanf("%d",&n);
	while(1){
	if(n>len1){
	n=n-len1;//当这个n大于输入字符串本身的时候,一个字符长度就是一个周期
	}else break;
	}
	for(i=0,j=0;i<n;i++,j++){
	s3[i]=s1[j];//把前面要消除的字符记录下来,为后面strcat作准备
	}
	for(i;i<100;i++){
	s3[i]='\0';//要将多余的去掉,并且使后面的数组都为0
	}
	for(i=0,j=n;j<len1;i++,j++){
	s1[i]=s1[j];//通过后移的方法消除掉前面n个字符
	}
    for(i;i<100;i++){
	s1[i]='\0';//s1后面的数组都为0,为后面strcat做准备,不然没有\0这个结束符,strcat会出现乱码
	}
	strcat(s1,s3);//s1和s3无缝衔接
	puts(s1);
    return 0;
}

纯净版:

#include<stdio.h>
#include <string.h>
int main (){
	char s1[101];
	char s2[101];
	char s3[101];
	gets(s1);
	strcpy(s2,s1);
	int n,m,len1,i,j;
	len1=strlen(s1);
	scanf("%d",&n);
	while(1){
	if(n>len1){
	n=n-len1;
	}else break;
	}
	for(i=0,j=0;i<n;i++,j++){
	s3[i]=s1[j];
	}
	for(i;i<100;i++){
	s3[i]='\0';
	}
	for(i=0,j=n;j<len1;i++,j++){
	s1[i]=s1[j];
	}
    for(i;i<100;i++){
	s1[i]='\0';
	}
	strcat(s1,s3);
	puts(s1);
    return 0;
}

string函数

strcat:无缝衔接两个数组,后者接到前者后面,后者只占前者的一个位置

strcpy:把后面的数组复制到前面去,如果前面数组有字符串,会覆盖掉

strstr:根据后面的数组,找前面数组的子串,如果有,找到的子串是带着后面所有字符串的。

比如 strstr(s1,s2)

s1:hello world!

s2: llo

strstr后puts(s1)是llo world!而不只是llo

要用一个新数组来存放,搬运之前的字符串数组,记得把新数组全部给弄成'\0';

c++超级简单写法:

利用string里面的substr找字符串的函数:
代码;

#include<iostream>
using namespace std;
int main(){
	string s1;
	int n;
	getline(cin,s1);//输入有空格,cin遇到空格结束,所以要用cin;
	cin>>n;
	n=n%s1.length();//可能有n大于字符长度的情况;
	cout<<s1.substr(n)<<s1.substr(0,n);//s.substr(a,b),a指首地址,b指的是长度;
                                       //s.substr(a),a指的是首地址,从首地址开始一直到结束;
	return 0;
}

substr永远滴神;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值