10、翻转句子中单词的顺序

来源:互联网 发布:路虎 爆炸 知乎 编辑:程序博客网 时间:2024/04/30 19:34
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如输入“I am a student.”,则输出“student. a am I”。


分析:

方法一、可以利用scanf函数以空格为分隔符的特性,按空格将字符串拆分成单词,并分别存入数组中,最后逆序输出即可。

方法二、二次颠倒字符。首先将整个字符串字符逆置,然后以空格为界,将每一个单词中字符逆置,最后输出即可。


方法一代码如下:

#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char *a[30],s[100];  //s输入字符串,a数组存放每个单词int index=0,i;       //index为单词个数while (scanf("%s",s)==1){a[index]=(char*)malloc(sizeof(char));memcpy(a[index],s,strlen(s));      //将单词拷贝到数组中。注意:不要用赋值号,那是赋的地址!!!        a[index++][strlen(s)]=0;}for (i=index-1;i>=0;i--)    //逆序输出{printf("%s  ",a[i]);}printf("\n");return 0;}

方法二代码如下:

#include <stdio.h>#include <string.h>#include <stdlib.h>int len;char s[30];void Reverse(int start,int end);void MainFun();int main(){printf("Please input a string :    ");fgets(s,sizeof(s),stdin);    len=strlen(s)-1;MainFun();printf("\nThe result is :   \n");    printf("%s\n",s);return 0;}void MainFun(){int m=0,n;Reverse(0,len-1);while (m<len){for (n=m;n<len&&s[n]!=' ';n++);Reverse(m,n-1);m=n+1;}}void Reverse(int start,int end){char temp;while (start<end){temp=s[start];s[start]=s[end];s[end]=temp;start++;end--;}}


原创粉丝点击