7-31字符串循环左移-创新互联
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
伊通ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!输入格式:输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:在一行中输出循环左移N次后的字符串。
输入样例:Hello World!
2
输出样例:llo World!He
- 题解思路
"Hello World!"左移2位输出,即:
1.先输出该字符串第2位(从第0位计)后的字符llo World!
2.再输出第0位与第1位字符He。
那么,如何先输出llo World!呢? 很简单,printf("%s",str+2);即可(str是字符串首地址)。如果我们仍然想借助printf("%s",str);碰到"\0"即停止的特性输出前2位字符He呢?很简单只要第2位的"l"变成"\0"即可,原字符串就变为了"He\0lo World!"。此时再printf("%s",str);即可完成任务。但这么做有一个隐含问题,原字符串内容改变了,后续再调用该字符串会出现问题。如何解决呢?我们只需要在左移输出任务完成后将变成"\0"的"l"变回去即可。
此外,关于左移N位。如果我们将"Hello World!"左移13位得到的结果与左移2位一致,也就是说实际左移位数应该为N%(strlen(string))。
- 代码详解
#include#includevoid Print_StringLeftMove(char* string,int len,int move) {
char temp = 0;
move %= len;//实际左移位数
printf("%s", string + move);//输出llo World!
temp = *(string + move);//暂存l
*(string + move) = '\0';//l 变成 \0
printf("%s", string);//输出He
*(string + move) = temp;//\0 变回 l
}
int main() {
char string[100] = { 0 };
gets(string);
int move = 0;
scanf("%d", &move);
Print_StringLeftMove(string, strlen(string), move);
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
名称栏目:7-31字符串循环左移-创新互联
标题链接:http://pwwzsj.com/article/dohidh.html