倒置字符串

简介: 倒置字符串

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.总结

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

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

相关文章
|
8月前
|
缓存 C语言
C语言 : 将一句话的单词进行倒置(逆序)
C语言 : 将一句话的单词进行倒置(逆序)
95 0
|
8月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
5月前
|
算法
如何反转给定的字符串?
【8月更文挑战第23天】
55 0
倒置字符串
倒置字符串
47 0
|
C语言
【每日一题】 将一句话单词倒置,标点不倒置
【每日一题】 将一句话单词倒置,标点不倒置
207 0
【每日一题】 将一句话单词倒置,标点不倒置
|
编译器 C语言
C语言:将一句话的单词进行倒置,标点不倒置。
总体思路: (可以把两步顺序调换) 第一步: 把 整个字符串 逆序 (知道 整个字符串 的首尾地址后,一对一对向整个字符串中间靠拢交换)
141 0
|
算法 C语言
(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)
(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)
185 0
|
8月前
|
存储 编译器 C语言
Day2 排序子序列、倒置字符串
Day2 排序子序列、倒置字符串
61 0
倒置字符串(倒置单词,标点不倒置)
倒置字符串(倒置单词,标点不倒置)
63 0
【每日挠头算法题(8)】最后一个单词的长度|重新排列字符串
【每日挠头算法题(8)】最后一个单词的长度|重新排列字符串