【C语言】将student a am i翻转成i am a student。

将student a am i翻转成i am a student。

方法:

(1)先将所有字符串进行翻转,即变成“i ma a tneduts”,

(2)当遇到空格时,则把空格前那段字符进行翻转,接着往下判断。

#include <stdio.h>
#include <string.h>
#include <assert.h>
char * fanzhuan(char *str)
{
    assert(str);
    char *l = str;
    char *r = str;
    while(*r != ‘\0‘)
    {
        r++;
    }
    while(l < r-1)
    {
        char tmp = *l;
        *l = *(r-1);
        *(r-1) = tmp;
        l++;
        r--;
    }
    l = str;
    r = str;
    while(*r != ‘\0‘)
    {
        while(*r != 32 && *r != ‘\0‘)
        {
            r++;
        }
        char *p = r;
        while(l < r-1)
        {
            char tmp = *l;
            *l = *(r-1);
            *(r-1) = tmp;
            l++;
            r--;
        }
        if(*p == ‘\0‘)
        {
            return str;
        }
        l = p+1;
        r = p+1;
    }
    return str;
}
int main ()
{
    char a[] = "student a am i";
    char *ret = fanzhuan(a);
    printf("%s\n",ret);
    return 0;
}

更好的代码个人还没想出,有待提高。

时间: 2024-10-07 16:38:50

【C语言】将student a am i翻转成i am a student。的相关文章

单词翻转(i am a student)---&gt;&gt;(student a am i)

问题描述: 写一个函数将i am a student  转化为  student a am i 解题思路: //i am a student --->--> student a am i #include<iostream> using namespace std; /*翻转函数--->利用交换*/ void words_reverse(char str[],int left,int right) { while(left < right) { str[left] +=

c语言,将字符串逆置,如&quot;i am a student&quot;逆置为&quot;student a am i&quot;

#include<stdio.h> #include<assert.h> /*求字符串长度*/ int my_strlen(char *str)           {         assert(str); int count=0; while(*str) { count++; str++; } return count; } /*逆置函数*/ char *reverse_str(char *start,char *end) { char *ret=start; char te

C语言递归,非递归实现翻转链表

翻转链表作为,链表的常用操作,也是面试常遇到的. 分析非递归分析: 非递归用的小技巧比较多,很容易出错. 递归分析比较简单,在代码里面 代码: #include<stdio.h> #include<stdlib.h> typedef int elemtype; typedef struct node{ elemtype element; struct node*next;//写成node* next;node * next;node *next;也是可以的,为了方便阅读,以后统一写

将数组&quot;student a am i&quot;改为&quot;i am a student&quot;.

题目: 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求:不能使用库函数.只能开辟有限个空间(空间个数和字符串的长度无关). 题目分析: 由于题目中给定的字符串中包含空格字符,就不能简单的将数组的内容整个进行逆置,题目中要求不能使用库函数,并且只能开辟有限个空间,不能与字符串的长度有关,所以不能建立一个与原数组相同的数组来存放更改过的字符串. 根据给定数组内容的特点,能够想到先将数组中的每个元素先

C语言强化(一)二叉排序树转成排序的双向链表

几乎每一位码士的编程起点都是C,在玩过了Java.C#.PHP.Python之后,重回C语言,又是什么样的一种感觉呢? 此篇博文作为 [C语言强化]系列文章的第一篇,来聊聊曾让许多码士抓耳挠腮的二叉树. 通过这道题,你可以掌握 如何创建二叉树 如何遍历二叉树 如何创建二叉链表 怎样使用递归算法 这是一道非常老土但又十分经典的数据结构题,或许很多人会说自己之前已经做过了,但又有多少人回过头来做的时候,可以不借助任何参考资料把解题思路写出来? 题目要求:二叉排序树->双向链表排序 不能新增结点,只能

将字符串student a am i反转为 i am a student

#include <stdio.h> #include <string.h> void reserve_string(char *l, char *r) { while(l < r) { char tmp = *l; *l = *r; *r = tmp; l ++; r --; } } void reserve(char ch[], int len) { int i = 0; char *chl = ch; char *chr = ch; while(ch[i]) { if(

C语言atoi()函数:将字符串转换成int(整数)

头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为:int atoi (const char * str); [函数说明]atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回. [返回值]返回转换后的整型数:如果 str 不能转换成 int 或者 str 为

用c语言写一个函数把十进制转换成十六进制(转)

#include "stdio.h" int main() { int num=0;int a[100]; int i=0; int m=0;int yushu; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};printf("请输入一个十进制整数:"); scanf("%d",&num); while(num>0) { y

Go语言之读取yaml配置文件,转换成struct结构,json形式输出

1.例子1 1.1.yaml文件内容如下: host: localhost:3306 user: root pwd: 123456 dbname: test 1.2.代码如下: //将yaml文件,转换成对象,再转换成json格式输出 package main import ( "encoding/json" "fmt" "gopkg.in/yaml.v2" "io/ioutil" ) //定义conf类型 //类型里的属性,