您的位置:首页 > 大数据 > 人工智能

【嵌入式系统学习记录】练习:把句子中的单词倒序;(输入"i am from shanghai",输出"shanghai from am i")

2018-03-13 23:19 531 查看
把句子中的单词倒序;(输入"i am from shanghai",输出"shanghai from am i")。#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void reverse(char *str)
{
int i;
char *temp = (char *)malloc(sizeof(char) * 20);
if(NULL == temp)
{
printf("malloc failure!\n");
exit(1);
}
temp = str;

while(*str != '\0' )
{
if(*str == ' ')
{
*str = '\0';
}
str ++;
}
for(i = 0; ; ++i)
{
str--;
if(*str == '\0')
{
printf("%s ",str + 1);
}
if(str == temp)
{
printf("%s ",temp);
break;
}

}

/*while(right > left)
{
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}

}

char *transform(char *str1)
{
char *first = str1;
char *last = str1 + strlen(str1) - 1;
while(*str1)
{
char *part = str1;
while(*str1 != '' && *str1 != '\0')
{
str1++;
}
reverse(part,str1-1);
while(str1 - 1 > part)
{
temp = *part;
*part = *str1-1;
*str1-1 = temp;
part++;
(str1-1)--;
}

if(*str1 != '\0')
{
str1++;
}
else
break;
}
reverse(first, last);
return first;
while(last > first)
{
temp = *first;
*first = *last;
*last = temp;
first ++;
last --;
}
return first;
*/

}

int main()
{
char *str1 = (char *)malloc(sizeof(char) * 50);
if(NULL == str1)
{
printf("malloc failure!\n");
exit(1);
}
// char *str2 = (char *)malloc(sizeof(char) * 20);
printf("please input :\n");
gets(str1);//在使用scanf输入时,其空格键默认为‘\0’,作为字符串输出时,“\0”作为结束的标志位,不便连续输出,所以这里使用gets()函数
reverse(str1);
// printf("%s",str);
free(str1);//释放内存
return 0;
}
网上最常见的方法就是选择先将所有的字符逆序,再将单个单词进行逆序。这里有一种新的方法,先将指针移到字符串的末尾,在这个过程中将字符串中的‘ ’空格替换为“\0”,然后将指针往前移动,以'\0'为标志位,停止移动并顺序输出‘\0’后面的字符,以此类推,就可以将整个字符串实现要求中的逆序,而且不会在使用printf()时,将全部的字符串输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐