题目一:
题目描述:
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
解题思路:
可以通过 scanf(“%s”) 把输入的数字当做一个字符串进行接收,然后直接从后向前倒序输出。
代码实现:
#include <stdio.h> #include<string.h> int main() { char str[32] = {0}; scanf("%s", str); //gets(str); for (int i = strlen(str) - 1; i >= 0; i--) { printf("%c", str[i]); } printf("\n"); }
结果情况:
符合题目要求,问题得到解决。
题目二:
题目描述:
对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
解题思路:
1.整体思想是双指针法,因此定义一对快慢指针p1,p2.
2.首先寻找一个单词的末尾,因此当s[p1]不是字母时p1就要–,循环终止时只要p1将指向一个单词的末尾(还有单词的话),此时将用p2记录下这个单词的结尾。
3.继续寻找单词的开头,因此当s[p1]为字母的时候就让p1–,最终p1+1指向该单词的开头,我们从p1+1遍历到p2,依次打印即可。
注意:scanf函数不能接受带空格的字符串,所以要使用gets函数
代码实现:
#include<stdio.h> #include<ctype.h> #include<string.h> #include<stdlib.h> int main() { char s[10000]; gets(s); int len = strlen(s); int p1 = len - 1, p2 = len; while (p1 >= 0) { while (p1 >= 0 && !isalpha(s[p1])) p1--; p2 =p1; while (p1 >= 0 && isalpha(s[p1])) p1--; for (int i = p1 + 1; i <= p2; i++) printf("%c", s[i]); printf(" "); } return 0; }
结果情况:
符合题目要求,问题得到解决。
总结:
文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。
希望今天的练习能对您有所收获,咱们下期见!