倒置字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了倒置字符串相关的知识,希望对你有一定的参考价值。

1.描述

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

输入描述:

每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

输出描述:

依次输出倒置之后的字符串,以空格分割

2.牛客网链接

​https://www.nowcoder.com/practice/ee5de2e7c45a46a090c1ced2fdc62355​

3.思路

将一个单词进行倒置,第一步先把整个字符串进行倒置,然后再对每一个单词进行倒置,废话不多说开始叭


逆序整个字符串:

首先定义char arr[100]=0;

输入 gets(arr)//这里进行介绍一下gets函数,它是进行字符串输入的,而且还能进 行空格的读取,但是用法有点怪,在微软软件里(包括VS2019)进行输入的时候 要用gets_s,但是在牛客网上的时候,直接用gest

int len=strlen(arr);

定义函数reverse(arr,arr+len-1);

函数内容

倒置字符串_字符串

逆序每个单词:

首先进行定义char*cur=arr;char*start=cur;

单词一旦遇到空格,表示一个单词的结束,从此下手

while(*cur!=‘ ’)

cur++

当while停下来的时候cur指向空格,而cur前一个位置就是单词的结束的位置例如(hello

这是一个单词的逆序,要进行多个的,再定一个表示开始,再调用reverse函数,传递两个参数,

第一个参数为start,第二个参数为cur-1.着就表示把一个单词逆序过去了,例如(hello world)

要跳要个空格,到下一个单词cur指向的是空格

cur++;

逃过去的时候,cur再赋值给start,此时就是一个循环了

倒置字符串_牛客网_02

假设还是(hello world)单词的结束并不是空格,第二个单词是以\\0,结束

所以判断内容为(*cur!= &&*cur!=\\0),只要在这循环中遇到空格或者\\0

就会结束​   而大循环的循环内容为(*cur)

但是还是有问题的,当我们以\\0为结束的时候cur++程序会进入死循环

在cur++;前面进行判断if(*cur!=\\0)

倒置字符串_字符串_03

4.整个程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>
void reverse(char*left,char*right)

assert(left && right);
while (left < right)

char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;


int main()

char arr[100] = 0 ;
//输入
gets_s(arr);
int len = strlen(arr);
//完成这个逆序
//1.逆序字符串
reverse(arr,arr+len-1);
//逆序每个单词
char* cur = arr;
while (*cur)

char* start = cur;
while (*cur != && *cur != \\0)

cur++;

reverse(start, cur - 1);
if (*cur != \\0)
cur++;

//打印
puts(arr);
return 0;

代码结果:

倒置字符串_逆序_04

5.注意

该程序是在VS2019 中运行的结果,要是在牛客网上要把gets_s改为gets.

6.感想

对于题目要分析正确,首先是对整个求逆序,其次在对每个单词求逆序,还需要多多练习,

并熟练掌握。

以上是关于倒置字符串的主要内容,如果未能解决你的问题,请参考以下文章

倒置字符串

c_cpp 将一句话里的单词进行倒置,标点符号不倒置。比如一句话:我来自北京。倒置后变成:beijing。来自我

将一句话里的单词进行倒置,标点符号不倒换。比如将“I come from Shanghai.”倒换后变为“Shanghai. from come I”

字符串逆序问题

互联网企业程序题总结

C语言实现来实现字符串反转,只有单词顺序反转,组成单词的字母不反转