「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
/***********************************************************************
目的:输入一句英文 (长度不超过100) ,并将其进行整体倒置,如 I like juejing. 倒置后变为 .gnijeuj ekil I
🔑 核心思想:
先确定字符串的左下标和右下标,然后循环交换,直至 left < right
平台:Visual studio 2017 && windows *************************************************************************/
📝 实现代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr[100] = { 0 };
//输入字符串
gets(arr);
//求字符串的长度
int len = strlen(arr);
//确定字符串的左下标和右下标
int left = 0;
int right = len - 1;
//交换,直至left == right或者left > right
while(left < right)
{
//备份
char temp = 0;
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
//迭代左右下标
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
💨 输出结果
/***********************************************************************
目的:输入一句英文 (长度不超过100) ,并将其中的单词进行倒置,标点不倒置。如 I like beijing. 倒置后变为 beijing. like I
🔑 核心思想:三步翻转法
▶ 1、字符串整体翻转:
.gnijieb ekil I
▶ 2、每个单词逆序 beijing. like I
平台:Visual studio 2017 && windows *************************************************************************/
📝 实现代码1:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//逆置函数
void reverse(char* left, char* right)
{
while(left < right)
{
char temp = 0;
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
int main()
{
char arr[100] = { 0 };
//输入字符串
gets(arr);
//求字符串的长度
int len = strlen(arr);
//字符串整体逆置,确定左下标和右下标
reverse(arr, arr + len - 1);
//每个单词逆置
char* start = arr;
while(*start)
{
char* end = start;
while(*end != ' ' && *end != '\0')
{
end++;
}
reverse(start, end - 1);
if(*end == ' ')
{
//说明后面还有未逆置的单词
start = end + 1;
}
else
{
//遇到了'\0',不能再往后了
start = end;
}
}
printf("%s\n", arr);
return 0;
}
💨 输出结果