|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
具体题目如下:
主函数中输入一行字符串,内有数字字符和非数字字符,调用函数(自己定义及实现的函数)求该字符串中数字子串中最大的数字, 并在主函数中显示最大的数字。限定该字符串中数字子串最多不超过10个。如字符串“a123b345.6x876.1y76t”,该字符串中含有数字子串最大的数字是876.1- #include <stdio.h>
- #include <string.h>
- int main(void)
- {
- int i = 0, j = 0, n = 0;
- char str[100];
- float t = 0,max = 0;
- scanf("%s",str);
- for(i=0;i<strlen(str);i++)
- {
- if(str[i]>='0' && str[i]<='9')
- {
- n++;
- sscanf(str+i,"%f",&t);
- for(j=i+1;j<strlen(str);j++)
- {
- if(str[j]>='0' && str[j]<='9' || str[j] == '.')
- ;
- else
- i = j-1;
- }
- }
- if(n==1)
- max = t;
- else
- max = (t>max?t:max);
- }
- printf("%g",max);
- return 0;
- }
复制代码
自己尝试了几次后,发现输出结果总是字符串中最先出现的数字子串,比如输入题目中的字符串,输出的是123而不是876.1
谢谢大家!
本帖最后由 sunrise085 于 2020-5-28 18:15 编辑
在你的程序基础上帮你修改了,也做好了注释。
- #include <stdio.h>
- #include <string.h>
- int main(void)
- {
- int i = 0, j = 0, flag = 0;
- char str[100];
- float t = 0,max = 0;
- scanf("%s",str);
- for(i=0;i<strlen(str);i++)
- {
- if(str[i]>='0' && str[i]<='9')
- {
- sscanf(str+i,"%f",&t);
- for(j=i+1;j<strlen(str);j++)
- {
- if(str[j] == '.')//防止出现连续多个小数点的情况,例如a123b345.6x876.1.123456y76t
- flag++;
- if((str[j]>='0' && str[j]<='9' || str[j] == '.')&& flag<=1)
- ;
- else
- break;//for循环读完这个数字后应该break跳出循环
- }
- i=j;//这里不必是j-1,因为第j个肯定不是数字,下次循环从j+1开始即可,不必再查看第j个字符
- flag=0;
- }
- max = (t>max?t:max);//不必看是否是第一个数字,max初值为0肯定不会大于所找到的任何一个数字,直接判断就行了。
- }
- printf("%g",max);
- return 0;
- }
复制代码
|
|