您的位置:首页 > 编程语言

小米秋招第二题

2016-09-27 20:25 148 查看
给定一个句子(只包含字母和空格),将句子中的单词位置反转,单词用空格分割,单词之间只有一个空格,前后没有空格。

输入: 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*.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  malloc 编程 小米