- 前言
- 一、题目
- 二、算法讲解
- 三、牛客网链接
前言
今天刷牛客网题目,碰到一道题感觉挺有意思的,对现阶段的我来说还是有点难度的,现在分享给大家。
一、题目
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
二、算法讲解输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
整体思路:
首先先将每个单词进行导致,比如 I like beijing. 倒置完之后就是 I ekil .gnijieb,然后再将整个字符数组进行倒置,正好就是 beijing. like I
#include#include void reverse(char* left, char* right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char str[101] = { 0 }; gets(str); //输入字符数组 char* p = str;//将字符数组首元素地址放到指针变量p中 while (*p) //判断当*p指向' '时循环结束,单词倒置完成 { char* start = p; char* end = p; //当末指针指向空格或者正好是最后一个单词指向' ',循环结束 while (*end != ' ' && *end != ' ') //让end指针指向单词最后一个字母 { end++; } reverse(start, end-1); //字符串倒置函数,比较简单 p = end + 1;//令指针p指向下一个单词,循环进入下一个单词的倒置 } int len = strlen(str); //求出整个字符串的长度 reverse(str, str + len - 1);//整个字符串进行倒置 puts(str); //输出倒置后的字符串 return 0; }
三、牛客网链接
倒置字符串_牛客网