【C语言典例】:倒置字符串 链接: https://www.nowcoder.com/questionTerminal/b0ae3d72444a40e2bb14af7d4cb856ba 来源:牛客网
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
代码语言:javascript复制每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
代码语言:javascript复制依次输出倒置之后的字符串,以空格分割
示例1
输入
代码语言:javascript复制I like beijing.
输出
代码语言:javascript复制beijing. like I
思路分析
通过观察得知,先对整个字符串逆序,后对字符串中每一个单词逆序便可解决此问题。
- 对整个字符串进行逆序
- 对字符串中的每一个单词进行逆序
如图所示
注意事项
不能使用scanf,因为scanf一遇到空格就中止,可以使用gets();或者 gets_s();
gets_s()的使用
首先将字符串逆序独立成一个逆序字符的函数
代码语言:javascript复制*str为字符串首地址,right为字符串中最后一个字母的下标,
void reseve(char* str, int left, int right)
{
while (left < right)
{
char ch = str[left];
str[left] = str[right];//交换字符串
str[right] = ch;
left ;
right--;
}
}
其次对字符串中的每一个单词进行逆序
代码语言:javascript复制 int temp = 0;//数组首元素的下标
for (int i = 0; i < len 1; i ).//遍历字符串
{
if (arr[i] == ' ' || arr[i] == 0)//遇到空格或者 就需要单词逆序
{
reseve(arr, temp, i - 1);//调用逆序数组, i为空格或者 的下标 i-1为单词最后一个字母的下标
temp = i 1;//下一个单词的第一个字母的下标
}
}
全部代码
代码语言:javascript复制
#include<string.h>
#include<stdio.h>
void reseve(char* str, int left, int right)
{
while (left < right)
{
char ch = str[left];
str[left] = str[right];
str[right] = ch;
left ;
right--;
}
}
int main()
{
char arr[100] = { 0 };
gets_s(arr,100);
int len = strlen(arr);
reseve(arr, 0, len - 1);
int temp = 0;
for (int i = 0; i < len 1; i )
{
if (arr[i] == ' ' || arr[i] == 0)
{
reseve(arr, temp, i - 1);
temp = i 1;
}
}
printf("%s", arr);
return 0;
}