小米秋招第二题

给定一个句子(只包含字母和空格),将句子中的单词位置反转,单词用空格分割,单词之间只有一个空格,前后没有空格。

输入: hello xiao mi

输出: mi xiao hello


一开始的算法是想要把每个单词取出输入一个新的数组,但一直越界。。只得用malloc分配每次单词所需空间,将它倒置,最后将它倒着输出就行了~

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	char str[100];
	char *change;
	//scanf("%s", str1);
	gets(str);
	int len = strlen(str);
	int i = len; int count = 0;
	int space; int former;
	while (i--)
	{
		if (int(str[i]) == 32)
		{
			count++;
			space = i;
			if (count == 1)
				former = len;
			int size = former - space - 1;
				change = (char *)malloc(size*sizeof(char));
			for (int k = 0; k < size; k++)
			{
				change[k] = str[space + k + 1];
			}
			for (int j = space; j < former - 1; j++)
			{
				str[j + 1] = change[size - 1 - (j - space)];
			}
            former = space;
			
		}
		
	}
	//对第一个单词的处理
	for (int i = 0; i < 100; i++)
	{
		if (int(str[i]) == 32)
		{
			int size = i;
			change = (char *)malloc(size*sizeof(char));
			for (int k = 0; k < size; k++)
			{
				change[k] = str[k];
			}
			for (int j = 0; j <size ; j++)
			{
				str[j] = change[size - j - 1];
			}
			break;
		}
	}
		for (int i = len - 1; i >= 0; i--){printf("%c", str[i]);}//倒输出字符串
	system("pause");
	return(0);
}


学到的东西:

1. scanf输入连续字符串,不能存储空格。此时应该用gets。

2.错误的代码:str【i】==“ ”,这样判断空格是错误的,后面默认是int类型,最好将str【i】强制转换为ascll码。

依然存在的问题:

1.编程时间不长,但是总是想法太多,但是每一个想法都没什么具体的可行性,说明仍然对基础知识点的运用不熟悉,要加强锻炼。

2.一遇到字符串的赋值或者读取就懵逼。。。且不知道何时用char、char*.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值