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