字符串"/>
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天:倒置字符串
发布评论