目录
题目要求
将一句英语短句中的单词进行倒置,标点符号不倒置
如:
输入:"I like chongqing very much,"
输出:"much, very chongqing 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 arr[100];
gets(arr);
//逆置字符串
int len = strlen(arr);
reverse(arr, arr + len - 1);
//逆置各个单词
char* start = arr;
char* cur = arr;
while (*cur != '\0')
{
//找到每个单词的尾地址
while (*cur != ' ' && *cur != '\0')
cur++;
//逆置每个单词
reverse(start, cur - 1);
start = cur + 1;
if (*cur == ' ')
cur++;
}
//输出
printf("%s\n", arr);
return 0;
}
代码解析:
先逆置整个字符串,再逆置各个单词
举例说明:
"I like chongqing very much,"
逆置整个字符串
",hcum yrev gniqgnohc ekil I"
逆置各个单词
"much, very chongqing like I"
解析:void reverse(char* left, char* right)
封装一个逆置函数,用来逆置 整个字符串 和 各个单词
解析:int len = strlen(arr);
字符串的长度
解析:reverse(arr, arr + len - 1);
逆置整个字符串 ,传递字符串的 起始地址arr ,和字符串的 结束地址arr + len(字符串长度) - 1
解析:while (*cur != '\0') 及内部循环
start指针 指向单词首地址,cur指针 找空格,找到空格后利用 reverse函数 逆置
逆置完一个单词后,start指针 指向下一个单词的首地址,利用外部 while循环 ,cur指针 重复找空格,最后完成所有单词的逆置
代码验证: