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://scyanting.com/article/dohidh.html