| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1009 人关注过本帖
标题:C语言高手解答下
取消只看楼主 加入收藏
lqpqbyb
Rank: 1
等 级:新手上路
帖 子:18
专家分:8
注 册:2011-1-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C语言高手解答下
请教大家一下,有题如下:
输入一个字符串,内有数字和非数字字符,如
a123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中。例如:123
放在a[0],456放在a[1]......统计共有多少个整数,并输出这些数。
以下是c代码:#include <stdio.h>
main()
{char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;
printf("Input a string:\n");
gets(str);
pstr=str;
pa=a;
ndigit=0;
i=0,j=0;
while(pstr[i])
 {if(pstr[i]>=47&pstr[i]<=58)
     j++;
  else
    {if(j>0)
       {digit=pstr[i-1]-48;
k=1;
while(k<j)
 {e10=1;
  for(m=1;m<=k;m++)
   e10=e10*10;
   digit=digit+(pstr[i-1-k]-48)*e10;
   k++;
 }
*pa++=digit;
ndigit++;
j=0;
       }
    }
 i++;
}
printf("There are %d numbers in this line.They are:\n",ndigit);
pa=a;
for(j=0;j<ndigit;j++)
printf("%d ",pa[j]);
printf("\n");
}
当输入字符串时,如果是输完按回车键,得出的结果就跟题目要求不一样,比如:
输入
a123x456 17960? 302tab5876(备注:前面有二个空格,输完5876直接按回车)
在turboc2.0运行得到以下结果
123 456 17960 302
但当输入
a123x456 17960? 302tab5876(备注:前面有二个空格,输完5876,先空格一下,再按回车键)
得出结果
123 456 17960 302 5876
输入其它的字符串也同上述那种结果。
有点搞不明白,懂的赐教一下,先谢谢先了。
搜索更多相关主题的帖子: 字符串 C语言 统计 字符串 C语言 统计 
2011-01-11 13:53
lqpqbyb
Rank: 1
等 级:新手上路
帖 子:18
专家分:8
注 册:2011-1-8
收藏
得分:0 
补充下:&位运算 &&逻辑运算这二个都试过(if(pstr[i]>=47&pstr[i]<=58)或if(pstr[i]>=47&&str[i]<=58)),在turboc2.0运行,结果都一样。
2011-01-11 13:56
lqpqbyb
Rank: 1
等 级:新手上路
帖 子:18
专家分:8
注 册:2011-1-8
收藏
得分:0 
哈哈
2011-01-11 14:38
lqpqbyb
Rank: 1
等 级:新手上路
帖 子:18
专家分:8
注 册:2011-1-8
收藏
得分:0 
不过我知道自己错在哪了。
在语句:printf("There are %d numbers in this line.They are:\n",ndigit);
前面补充如下语句就可了:
if(j>0)
{digit=pstr[i-1]-48;
     k=1;
     while(k<j)
      {e10=1;
         for(m=1;m<=k;m++)
         e10=e10*10;
         digit=digit+(pstr[i-1-k]-48)*e10;
         k++;
      }
 *pa=digit;
 ndigit++;   
 i++;
}
之前没加这段程序之前,就会出现输入字符串后按不按空格再回车结果不同。
由于统计连续整数的个数放在while循环体中的else 语句后面,因此在以下情况会造成结果才输出
输入的字符串比如:1 2 3 4(备注:前面有三个空格,只有四个数字)
当程序执行到4字符时,前面已经统计有三个数字了,但当程序执行到4字符后的结束符'\0'时,跳出while循环,因此就没把4字符统计进去。
因此在输入的字符串:1 2 3 4 (备注:前面有四个空格(4后面有空格),四个数字)结果就把4字符统计进去,因为4后面有空格字符。
不过把统计整数个数放在if前面,一碰到数字就统计个数,应该可以避免出现以上结果,不过相应程序要改动。嘿嘿
2011-01-11 14:54
快速回复:C语言高手解答下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015306 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved