题目:
思路可以先别看 自己思考一下 试一下
思路:首先观察输入和输出可以发现,是整个单词进行倒置了,然后我们就会想用一次倒置,
但是倒置一次会发现 是.gnijieb ekil I,如果我们再倒置一次 又会返回原先的I like beijing
所以我们可以写一个 倒置函数,先将全部字母进行倒置,将然后写一个while进行对每一个单词倒置,即碰到一个空格的时候 就将这个单词进行倒置 ,但是需要用什么知识进行排序呢?你可以先思考一下
不
许
偷
看
自
己
想
!
不
许
偷
看
自
己
想
!
很明显,这道题需要用到的知识为:字符串数组,指针;
以下为我写的代码,感觉还可以
/对一句话的每个单词进行倒置 但是标点符号不倒置 //输入i like beijing. 输出beijing. like i #include#include void sort(char *star,char *end) //传地址 { while (star < end) { char p = *star; //这里要加上*号 *star = *end; *end = p; star++; end--; } } int main() { char a[100]; //定义字符串数组 char b[100]; int i; gets(a); //读取输入 int len = strlen(a); //测字符串长度 需要引用 头文件 char *star = a; //用来标记每个单词的首元素地址 sort(a, a + len - 1); for (i = 0; i <= len; i++) { if (*(a + i) == ' '|| *(a + i)=='') { sort(star,a+i-1); star = (a + i+1);//这个加1非常细节 因为碰到空格就会执行if语句 //所以不加1的话就会取空格作为为首元素地址,而不是单词的首元素地址 } } printf("%s", a); return 0; }
希望对你有帮助,感谢浏览!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)