2015-18

请编写函数char *fun(char *str,int m),实现将输入的字符串每个字符“循环左移”m位。
例如,输入“ABCDE",则循环左移⒉位应输出“CDEAB”,
若输入“1234567”,则循环左移3位输出“4567123"。
在主函数中实现输入,调用函数fun,然后输出。

/*
请编写函数char *fun(char *str,int m),实现将输入的字符串每个字符“循环左移”m位。
例如,输入“ABCDE",则循环左移⒉位应输出“CDEAB”,
若输入“1234567”,则循环左移3位输出“4567123"。
在主函数中实现输入,调用函数fun,然后输出。
*/

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

char *fun(char *str, int m)
{
    int i = 0, len = strlen(str);
    char res[100];
    for(int front = m ; front < len ; front++, i++)  //将m及其以后的元素复制到res的前面 
    {
        res[i] = str[front];
    }
    for(int rear = 0 ; rear < m ; rear++, i++)        //将m以前的元素复制到res的后面 
    {
        res[i] = str[rear];
    }
    strcpy(str, res);
    return str;  //***这里不能直接返回res,因为局部函数调用完毕后会释放其内存,会导致数据丢失 
}

int main()
{
    char s[100];
    int m;
    printf("Please input string: ");
    scanf("%s",s);
    printf("Enter m: ");
    scanf("%d",&m);
    if(m>strlen(s))
    {
        printf("\nData error.\n");
        return 0;
    }
    printf("Result is: %s\n", fun(s,m));
    return 0;
}

 

posted @ 2022-02-24 17:25  小菜鸡~  阅读(32)  评论(0)    收藏  举报