倒置字符串

简介: 倒置字符串

1.题目描述

题目链接:https://www.nowcoder.com/questionTerminal/8869d99cf1264e60a6d9eff4295e5bab

2.题目分析

思考一下,我们可以分为两步

  • 第一步,将整个字符串逆序
  • 第二步,把逆序后的每个单词再逆序

或者我们可以:

  • 第一步,逆序每个单词
  • 第二步,再逆序整个字符串

  • 逆序字符串,需要告诉字符串的起始位置和结束位置
  • 逆序单词,同样需要告诉单词的起始位置和结束位置

这两种算法思维都是可以的,那我们实践一下

3.代码

我们可以封装一个reverse函数来进行字符串逆序

实现逻辑是这样的

reverse函数

void reverse(char* left,char* right){
    while (left<right) {
    char tmp=*left;
    *left=*right;
    *right=tmp;
    left++;
    right--;
    }
}

逆序整个字符串,调用这个函数,逆序单词同样可以调用这个函数

用while循环,当开始指针遇到空格或者'\0'的时候就停止;没有遇到空格或者'\0'的时候,则是一个单词,逆序这个单词

可以看主函数的代码理解

主函数

#include <stdio.h>
void reverse(char* left,char* right){
    while (left<right) {
    char tmp=*left;
    *left=*right;
    *right=tmp;
    left++;
    right--;
    }
}
int main() {
    char arr[101]={0};
    gets(arr);
    //逆序整个字符串
    int len=strlen(arr);
    reverse(arr,arr+len-1);
    //逆序每个单词
    char* cur=arr;
    while(*cur){
        char* strat=cur;
        while (*cur!=' '&&*cur!='\0') {
            cur++;
        }
        char* end=cur-1;
        reverse(strat, end);
        if(*cur==' ')
        cur++;
    }
    printf("%s\n",arr);
    return 0;
}

这样,我们这个问题就解决了

为什么使用gets()接收字符串呢?

因为scanf()接收字符串,遇到空格就停止不会继续往后读取了

4.总结

同样我们可以感受到,写代码不仅仅是简单的敲敲键盘,更重要的是我们的思维,我们一定要多多练习,锻炼自己的思维能力

一个优秀的程序员肯定是先思考再敲代码的,思维永远走在双手的前面,一起加油吧!小杜陪各位一起成长

相关文章
|
索引
【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符
目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符
48 0
|
3月前
|
算法
如何反转给定的字符串?
【8月更文挑战第23天】
45 0
|
5月前
917. 仅仅反转字母
917. 仅仅反转字母
倒置字符串
倒置字符串
43 0
|
6月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6月前
|
存储 编译器 C语言
Day2 排序子序列、倒置字符串
Day2 排序子序列、倒置字符串
46 0
倒置字符串(倒置单词,标点不倒置)
倒置字符串(倒置单词,标点不倒置)
49 0
逆序一个字符串的每一组单词(不是倒叙)
整体思路: 1.先将整个字符串倒叙:i like china.->.anihc ekil i 2.将倒叙后的每一块单词再倒叙:.anihc->china. 想必大家都发现了,倒叙整个字符串和倒叙每一块是一样的,那么我们不妨写一个倒叙的函数在这里用reserve表示!
72 0
|
C语言 容器
互换函数和反转字符串
互换函数和反转字符串
100 0
逆序字符串 和 字符串的逆序输出 的区别~
逆序字符串 和 字符串的逆序输出 的区别~
112 0