| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1015 人关注过本帖
标题:求助!!新手帮看一下代码,看看哪里有问题。。
只看楼主 加入收藏
fire小宇宙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-11
收藏
得分:0 
回复 6楼 T_MACC
先遍历数组,在第一个条件if (str[i] >= '0' && str[i] <= '9')
找到数字字符,然后第二次遍历数组,在条件if (str[i] < '0' && str[i] > '9')
找到数字字符结束的地方,然后提取这段每个数字字符处理。
2015-07-12 17:39
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:20 
回复 9楼 fire小宇宙
if (str[i+j] < '0' && str[i+j] > '9' )这是一个恒假的条件,既小于3又大于8的数会有吗,改为if (str[i+j] < '0' || str[i+j] > '9' )
2015-07-13 09:56
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
#include <stdio.h>
int data[10] ;//存放提取的数据
int main()
{
   int getNumbersInString(const char *,int *);
    char *a;
    int n,i,sum=0;
    a="30gh678hg5gh234hj26";
    if((n=getNumbersInString(a,data))==0) return 0;
    for (i=0; i<n;i++) sum+=data[i];
    //以下打印结果
    printf("%d (%d",sum,data[0]);
    for(i=1;i<n;i++) printf("+%d",data[i]);
    printf(")\n");
    return 1;
}

int getNumbersInString(const char * str,int *data)
{
    int pow10(int);
    int flg =0,n=0;//flg标志历史状态,0表示字母,1表示数字,n 记录数据个数
    int i = 0;
    data[0]=0;
    while(str[i]!='\0')
    {
        if ((str[i] >= '0' )&& (str[i] <= '9'))//判断当前字符是否为数字
           {
         flg=1;
         data[n]=data[n]*10+(str[i]-'0');  
       }
        else
          {
                if(flg) n++;//为真时历史状态是数字 ,设置下一个数据记录位置
            flg=0;//改变状态     
           }
          i++;  
    }
         
     if(flg)n++;
    return n;//返回提取的数据个数
}


学习16楼代码的方法,对程序做了修改

[ 本帖最后由 jklqwe111 于 2015-7-13 19:48 编辑 ]
2015-07-13 09:58
fire小宇宙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-11
收藏
得分:0 
回复 12楼 jklqwe111
好像是这儿问题,谢谢!!
2015-07-13 15:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>

unsigned foo( const char* s )
{
    unsigned ret = 0;

    while( *s )
    {
        int i = 0;
        sscanf( s, "%*[^0-9]%n", &i );
        s += i;

        unsigned val = 0;
        i = 0;
        sscanf( s, "%u%n", &val, &i );
        s += i;
        ret += val;
    }

    return ret;
}

int main( void )
{
    printf( "%u\n", foo("abc123def45gh678") );
    return 0;
}
2015-07-13 16:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>

unsigned foo( const char* s )
{
    unsigned ret = 0;

    unsigned m = 0;
    for( const char* p=s; *p; ++p )
    {
        if( *p>='0' && *p<='9' )
            m = m*10 + (*p-'0');
        else
            ret+=m, m=0;
    }
    ret += m;

    return ret;
}

int main( void )
{
    printf( "%u\n", foo("abc123def45gh678") );
    return 0;
}
2015-07-13 16:21
fire小宇宙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-11
收藏
得分:0 
回复 16楼 rjsp
这个666,非常感谢!
2015-07-13 20:26
mj0011
Rank: 2
等 级:论坛游民
帖 子:24
专家分:39
注 册:2014-12-23
收藏
得分:0 
数组下标ij 都是从0开始的当str[i+j]也就是str[0]中元素为0时第三个测试点条件永远不会满足,新手观点仅供参考
2015-07-16 11:38
丨丶钟情
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-7-20
收藏
得分:0 
先试数   
2015-07-20 10:13
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 15楼 rjsp
m = m*10 + (*p-'0')   与 m = m*10 + (*p)  为什么会有区别 ?能告知么?
2015-07-20 11:30
快速回复:求助!!新手帮看一下代码,看看哪里有问题。。
数据加载中...
 
   



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

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