注册 登录
编程论坛 C语言论坛

输入一个整数n,接下来输入n行字符串,对每行的字符串,请将前一半字符移动后一半字符后面,如果字符总数为奇数,则前一半少一个,后一半多一个处理。

易小小木 发布于 2020-12-12 11:43, 2022 次点击
运行代码:
3
abc123       //输入
123abc      //输出
abcd1234    //输入
1234abcd    //输出
123456789   //输入
567891234   //输出
需要用到strlen
3 回复
#2
易小小木2020-12-12 12:50
已经写出
#3
rjsp2020-12-12 13:04
程序代码:
#include <stdio.h>
#include <string.h>

void foo( char* s )
{
    size_t n = strlen(s);
    if( n%2 == 0 )
    {
        for( size_t i=0; i!=n/2; ++i )
        {
            char t = s[i];
            s[i] = s[n/2+i];
            s[n/2+i] = t;
        }
    }
    else
    {
        char t = s[0];
        for( size_t i=n/2; i!=0; i=(i+n/2)%n )
            s[(i+n/2+1)%n] = s[i];
        s[n/2+1] = t;
    }
}


main 函数没法写,因为题目没交代字符串最大长度是多少,“每行的字符串”是否包含空格等其它字符。
#4
rjsp2020-12-12 13:09
这一道题还可以作弊

程序代码:
void foo( char* s )
{
    size_t n = strlen(s);
    printf( "%.*s%.*s\n", (int)((n+1)/2), s+n/2, (int)(n/2), s );
}
1