标题:输入一个整数n,接下来输入n行字符串,对每行的字符串,请将前一半字符移动 ...
只看楼主
易小小木
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-11
结帖率:100%
 问题点数:0 回复次数:3 
输入一个整数n,接下来输入n行字符串,对每行的字符串,请将前一半字符移动后一半字符后面,如果字符总数为奇数,则前一半少一个,后一半多一个处理。
运行代码:
3
abc123       //输入
123abc      //输出
abcd1234    //输入
1234abcd    //输出
123456789   //输入
567891234   //输出
需要用到strlen
搜索更多相关主题的帖子: 字符串 处理 奇数 字符 输入 
2020-12-12 11:43
易小小木
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-11
得分:0 
已经写出
2020-12-12 12:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#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 函数没法写,因为题目没交代字符串最大长度是多少,“每行的字符串”是否包含空格等其它字符。
2020-12-12 13:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
这一道题还可以作弊

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504223-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.261646 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved