1 Star 0 Fork 0

苏生/小铭的c语2022

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2-12.c 2.47 KB
一键复制 编辑 原始数据 按行查看 历史
#define _CRT_SECURE_NO_WARNINGS 1
////逆序单词,(字符串中),两种方法
////方法1,暴力拆分
////方法二,单词逆序再总逆序,把i like china.逆序成为china. like i
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
//void reverse(char* pa, char* pb)
//{
// assert(pa && pb);
// int i = 0;
// int j = pb - pa;
// while (i < j)
// {
// char temp = pa[i];
// pa[i++] = pa[j];
// pa[j--] = temp;
// }
//}
//int main()
//{
// char p[1000] = { 0 };
// //if (gets(p)!=EOF)
// //{
// // int a = strlen(p);//数组要归零,否则报警告则没有终止符
// // reverse(p, p + a-1);//要-1否则就会和\0置换了,就会消除。
// // printf("%s\n", p);
// //}
// gets(p);
// char* start = p;
// char* end = start;
// //逆置每个单词
// while (*end!='\0')
// {
// while ((*end) != ' '&& (*end) != '\0')
// end++;
// reverse(start, end - 1);
// if (*end != '\0')
// {
// start = end + 1;
// }
// else
// start = end;
//
// end = start;
// }
// reverse(p, end-1);
// printf("%s\n", p);
// return 0;
//}
//void reverse(char* left, char* right)
//{
// int i = 0;
// int j = right - left;
// while (i < j)
// {
// char temp = *(left + i);
// *(left + i++) = *(left + j);
// *(left + j--) = temp;
// }
//}
//int main()
//{
// //char* arr = (char*)calloc(100,sizeof(char));//calloc自带初始化为0
// char* arr = (char*)malloc(100);
// if (arr != NULL)
// {
// gets(arr);
// char* start = arr;
// char* end = start;
// while (*end != '\0')
// {//一个单词
// while (*end != '\0' && *end != ' ')
// {
// end++;
// }
// reverse(start, end - 1);
// if (*end != '\0')
// start = end + 1;
// else
// start = end;
// end = start;
// }
// reverse(arr, end - 1);
// printf("%s\n", arr);
// }
// return 0;
//}
//两次逆置不需要考虑空格问题,直接移动要考虑空格问题
int main()
{
char* arr1 = (char*)calloc(100,sizeof(char));
char* arr2 = (char*)calloc(100,sizeof(char));
assert(arr1 && arr2);
gets(arr1);
char* right = arr1 + strlen(arr1) - 1;
char* left = right;
//一次
while (left != arr1)//空格问题
{
while (*left != ' ' && left != arr1)
{
left--;
}
*(right + 1) = '\0';
if (left == arr1)
{
if (*arr2 != 0)//第一次,不用加空格直接拷贝
{
strcat(arr2, " ");
strcat(arr2, left);
}
else
strcpy(arr2, left);
}
else
{
if (*arr2 != 0)
{
strcat(arr2, " ");
strcat(arr2, left + 1);
}
else
strcpy(arr2, left + 1);
}
if (left == arr1)
right = left;
else
right = left - 1;
left = right;
}
printf("%s", arr2);
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xiaominggitee/xiaomings-c-language2022.git
git@gitee.com:xiaominggitee/xiaomings-c-language2022.git
xiaominggitee
xiaomings-c-language2022
小铭的c语2022
master

搜索帮助