当前位置: 代码迷 >> C语言 >> [求助] 明天的作业,想半天不会做
  详细解决方案

[求助] 明天的作业,想半天不会做

热度:116   发布时间:2006-05-07 22:15:00.0
[求助] 明天的作业,想半天不会做

问个问题拉:输入一个字符,内有数字和非数字字符,如a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中.统计共有多少个整数,并输出这些数.

谢谢大家拉,最好说详细点.

搜索更多相关的解决方案: 作业  数字  整数  字符  

----------------解决方案--------------------------------------------------------
问个问题拉:输入一个字符
----------------解决方案--------------------------------------------------------
错拉  是字符串
----------------解决方案--------------------------------------------------------

这是书上的原题吧
你最好自己写写再说吧


----------------解决方案--------------------------------------------------------
好的 现在晚拉 我明天写拉 睡觉去拉
----------------解决方案--------------------------------------------------------

最好要用到链表


----------------解决方案--------------------------------------------------------

/* 问个问题拉:输入一个字符串,内有数字和非数字字符, */
/* 如a123x456 17960? 302tab5876 */
/* 将其中连续的数字作为一个整数,依次存放到一数组a中. */
/* 统计共有多少个整数,并输出这些数. */
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#define N 30

int main(void)
{
char str[N];
int a[N] = {0}, i, j;
int num = 0, n = 0, sum = 0, len = 0, flag = 0, count = 0;

printf("Enter a string: ");
gets(str);

for (i = strlen(str) - 1; i >= -1; i--)
{
if (isdigit(str[i]))
{
num = (str[i] - '0') * (int)pow(10, n++);
sum += num;
flag = 1;
}
else
{
if (flag == 1 && sum >= 10)
{
a[len++] = sum;
n = 0;
sum = 0;
flag = 0;
}
else if (num < 10)
{
n = 0;
sum = 0;
flag = 0;
}
}
}
for (j = 0; j < len; j++)
{
count++;
printf("%d\n", a[j]);
}
printf("count = %d\n", count);

getch();
return 0;
}






----------------解决方案--------------------------------------------------------

呵呵,楼上的~不行~


----------------解决方案--------------------------------------------------------

你写个更高效的


----------------解决方案--------------------------------------------------------
我要写是很简单的事情,问题是,我为什么要帮人家做作业?

先不讨论你的程序是否能得到结果
先从你的设计思想去分析

#define N 30
char str[N];
int a[N] = {0}, i, j;
gets(str);

你很明显企图用一个固定大小的字符数组和int数组去装输入的字符串和输出的整形数组
但是,你这样写出的程序从它定义#DEFINE N 30的那句开始就已经死了,被你定死的~
空间浪费是小事,程序溢出才是大事!

也许你会说:什么嘛~不可能会有人有耐心输入超过30个字符去进行测试的.那你就错了~~~
有句话说得好: 如果一件以外它可能会发生,那么它就肯定会发生.
这是句名言,惭愧的是我自己也很难完全按照这句话的意思去处理那些程序中出现的异常.


再从算法角度分析
看这句
for (i = strlen(str) - 1; i >= -1; i--)
要知道strlen(char*)函数的算法复杂度是字符串的长度,一旦调用了这句就表明其实你已经遍历了一遍字符串了.然而你却仍然没得到想要的结果....


最后从编程习惯剖析
总的来说,你已经有一个非常好的编程习惯了,起码有了代码的缩进这个最基本的编程技巧了,别惊讶,我有好多同学仍然喜欢像玩堆高塔一样把代码堆积起来,十分恐怖~
但是一些容易让其他人阅读产生误解的变量,比如你这个程序中的flag变量就不知道用来做什么~应该加一点注释


顺便再说一下,你那程序怎么用的啊?为什么我老是得不到结果?
----------------解决方案--------------------------------------------------------
  相关解决方案