【C语言】[编程题]倒置字符串


前言

今天刷牛客网题目,碰到一道题感觉挺有意思的,对现阶段的我来说还是有点难度的,现在分享给大家。


一、题目

将一句话的单词进行倒置,标点不倒置。比如 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;
}

三、牛客网链接

倒置字符串_牛客网

猜你喜欢

转载自blog.csdn.net/lyq2632750277/article/details/126214866