倒置字符串
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,此时就是一个循环了
假设还是(hello world)单词的结束并不是空格,第二个单词是以\\0,结束
所以判断内容为(*cur!= &&*cur!=\\0),只要在这循环中遇到空格或者\\0
就会结束 而大循环的循环内容为(*cur)
但是还是有问题的,当我们以\\0为结束的时候cur++程序会进入死循环
在cur++;前面进行判断if(*cur!=\\0)
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;
代码结果:
5.注意
该程序是在VS2019 中运行的结果,要是在牛客网上要把gets_s改为gets.
6.感想
对于题目要分析正确,首先是对整个求逆序,其次在对每个单词求逆序,还需要多多练习,
并熟练掌握。
以上是关于倒置字符串的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 将一句话里的单词进行倒置,标点符号不倒置。比如一句话:我来自北京。倒置后变成:beijing。来自我
将一句话里的单词进行倒置,标点符号不倒换。比如将“I come from Shanghai.”倒换后变为“Shanghai. from come I”