题解 | #单词倒排#
单词倒排
https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836
#include<stdio.h> #include<string.h> int main(void) { int i=0; int j=0; int k=0;//三个都是用于循环 char arr[10000]={0};//这个数组用于存放输入的字符串 scanf("%[^\n]%*c",arr); //查看实际输入了多少元素 int sz=strlen(arr);//实际元素的个数 //题目上面也有提示,每个单词最多20个字母,我们可以试试二维数组,每个单词放在其中一个一维数组里面,连续的空格也放在一起 //首先为了方便下面的计算,现将所有的分割符换成空格 for(i=0;i<sz;i++) { if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')) { ; } else { arr[i]=' '; } } int result[sz][21];//每个单词最高不超过20,按照最大的来设置数组,也就是一个字母算一个单词 for(i=0;i<sz;i++)//对输入的字符串进行遍历,sz个元素,那就循环sz次 { if(arr[i]==' ') { result[j][k]=arr[i]; k++;//当前二维数组j行的第k if(arr[i+1]!=' ' || arr[i+1]=='\0') { result[j][k]='\0';//下一个元素不是空格,就会保存到下一行数组中 j++; k=0; } } else { result[j][k]=arr[i]; k++; if(arr[i+1]==' ' || arr[i+1]=='\0') { result[j][k]='\0'; j++; k=0; } }//最后一个元素在添加到二维数组以后,j还是会+1 } for(i=j-1;i>=0;i--) { k=0; while(result[i][k]!='\0') { if(result[i][k]!=' ') { printf("%c",result[i][k]); k++; } else { k++; } } if(result[i][k-1]!=' '&& i!=0) { printf(" "); } } }