5-31 字符串循环左移

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

输入格式:

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

输出格式:

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

输入样例:

Hello World!
2

输出样例:

llo World!He

解题思路:

利用 C 语言本身提供的字符串处理函数能更方便地解题。

循环左移有有个特点,当要移动的长度等于字符串有效长度或其倍数时,左移后字符串还会是原样。因此程序首先对要移动的次数对有效长度取余。

再利用 strcpy,strcat 来产生目标字符串。具体如算法所示。

解题代码:

#include
#include

int main ()
{
    char s[101];
    gets (s);
    
    int N;
    scanf("%d", &N);
    
    int s_length = strlen (s);
    int i = N % s_length;
    char target[101];
    
    if (i != 0) {
        strcpy (target, s + i);
        s[i] = '\0'; //复制之后,调整字符串 s 的最终位置 (i 之后的字符已经复制给 target) 
        strcat (target, s); 
        puts (target);  
    } else {
        puts (s); //左移次数是字符串有效长度的倍数,直接输出原字符 
    }
    
    return 0; 
}

你可能感兴趣的:(5-31 字符串循环左移)