题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000
注意本题有多组输入
输入描述
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述
得到逆序的句子
示例1
输入:
I am a boy
输出:
boy a am I
示例2
输入:
nowcoder
输出:
nowcoder
思路
逆置两次,第一次对整句逐字符逆置,第二次在每个单词间逐字符逆置
例如:abc 1234
第一次逆置:4321 cba
第二次逆置:1234 abc
具体实现
#include<stdio.h>
#include<string>
int main()
{
printf("请输入一串字符串:\n");
char str1[1000] = {};
for (int i = 0; i < 1000; i++)
{
str1[i] = getchar();
if (str1[i] == '\n')
{
str1[i] = '\0';
break;
}
}
int len = strlen(str1);
int b = (len-1);
for (int i = 0; i < b; i++)//首先逐字符逆置句子
{
char tmp = str1[i];
str1[i] = str1[b];
str1[b] = tmp;
b--;
}
int flg = 0, a = 0;
while (flg <=len)//再将每个单词逆置
{
if (str1[flg] == 32 || str1[flg] == '\0')//检索到空格
{
int tmp2 = flg;
while (a < tmp2)
{
char tmp1 = str1[a];
str1[a] = str1[tmp2 - 1];
str1[tmp2 - 1] = tmp1;
a++;
tmp2--;
}
a = ++flg;
}
flg++;
}
printf("逆置的句子为:%s", str1);
return 0;
}
时间复杂度:
O(n*log2(n))
小结:
1.逐字符