lvxuzhou


私信TA

用户名:lvxuzhou

访问量:106753

签 名:

lvxuzhou

等  级
排  名 47
经  验 12168
参赛次数 0
文章发表 56
年  龄 0
在职情况 学生
学  校 西安
专  业

  自我简介:

解题思路:

解决此题目分为2步骤:

1、获取字符串

2、字符串逆转

注意事项:

第一步 获取用户输入字符串,以及字符串长度。

    char *string=NULL;
    int length=0;
    scanf("%[^\n]%n",string=(char*)calloc(length+1,1),&length);

    1.使用到scanf高级用法:%[^\n]、%n,使用该占位符可以获取用户输入字符串长度(不包括'\0')。

    2.大部分C语言函数参数赋值顺序为从右向左。

    3.变量length中是用户输入的字符串长度,string中是用户输入的字符串。

    4.使用calloc动态分配length+1字节内存空间,该函数会将分配的内存空间初始化为0。

第二步 字符串翻转

    void change(char src[])
    {
        int i;
        int len=strlen(src);
        for (i=0;i<len/2;i++)
        {
        src[i]^=src[len-i-1];
        src[len-i-1]^=src[i];
        src[i]^=src[len-i-1];
    }

  1. 利用C语言中的按位异或运算符(^)进行数组元素交换,提高速率。

  2. len/2提高交换效率。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void change(char src[])
{
int i;
int len=strlen(src);
for (i=0;i<len/2;i++)
{
src[i]^=src[len-i-1];
src[len-i-1]^=src[i];
src[i]^=src[len-i-1];
}
}
int main(void)
{
char *string=NULL;
int length=0;
scanf("%[^\n]%n",string=(char*)calloc(length+1,1),&length);
change(string);
puts(string);
return 0;
}

用法:

    直接输入字符串即可

输入:

    123456789

输出:

    987654321


欢迎交流

个人QQ:757368775 

交流群:599151072

【注意】

添加好友时请注明“来自c语言网”

 

0.0分

39 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

//楼主的代码比较高深, 觉得不太容易懂的可以参考下我这个代码,10行解决。
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
	std::string str;
	std::cin>>str;
	reverse(str.begin(),str.end());
	std::cout<<str;	
}
2018-12-20 00:24:10
太复杂了,看我的吧。。。
2018-07-09 22:33:10
少了free(string)并且string=NULL的话,程序结束后才能释放内存?
2018-06-22 18:25:57
关键字,用法太高级了
2018-06-15 11:49:33
你这代码百度都看不懂……
2018-06-13 17:20:39