C语言每日一练——第1天:倒置字符串

编程入门 行业动态 更新时间:2024-10-11 03:20:12

C语言每日一练——第1天:倒置<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串"/>

C语言每日一练——第1天:倒置字符串

🌟 前言

(꒪ꇴ꒪(꒪ꇴ꒪ )😉 我是Scort

今天是C语言每日一练,第1天!

快上车,握好方向盘跟我有一起打天下嘞!

文章目录

  • 1、问题描述
  • 2、题目分析
  • 3、算法设计
  • 4、代码实现📝
  • 5、总结


1、问题描述

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

2、题目分析

本题归根结底是属于 字符串的逆序问题 ,但是为逆序里的逆序,但又考虑到字符串中有空格的存在,所以要用gets函数而不能用scanf,因为scanf默认读到空格就不再往后读,不符合题意。
ps: scanf("%d[^\n]", arr)效果和gets函数一样,但是这样不是不够方便呢?

3、算法设计


使用三步翻转法,即先将字符串整体逆置,再对逆置后的字符串中每一个单词部分进行逆置
比如:I like beijing.
第一步,字符串整体逆置,得到:.gnijieb ekil I
第二步,将字符串中每一个单词逆置,得到:beijing. like I
这里字符串操作的实现非常关键,故单独实现一个函数进行字符串的逆置,由于每个单词的长度不一,因此通过指针来实现字符串的逆置可以对代码进行简化。

4、代码实现📝

完整代码📝

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

5、总结

本题目主要考察了字符串倒序,更多考的是对每个单词逆序时,由于每个单词的长度不一而有没有想出用指针来解决。

更多推荐

C语言每日一练——第1天:倒置字符串

本文发布于:2024-03-04 16:38:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709807.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!