| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 975 人关注过本帖, 1 人收藏
标题:就送20分啊
只看楼主 加入收藏
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
你的运行环境是什么?我的怎么就是乱码?

小小战士,战士中的战斗机!
2012-11-10 18:53
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
首先吧,楼主这段代码想试验个什么还真看不出来。就这么两行也谈不上什么更优秀。

给你演示一个相对实用好玩的功能吧,自己编译执行看看。也许这本就是你想要实现的东西。其实这个更适合用宽字符来做。
程序代码:
#include<stdio.h>

char * chinese_number(int a, char * strcn)
{
    char * b = "个十百千万亿";
    char * c = "零一二三四五六七八九";
   
    int s[16] = {0}, n, i, t;
   
    for(n = 0; a; a /= 10) s[n++] = a % 10;
   
    for(i = 0, s[n] = 1; n--;)
    {
        if(s[n])
        {
            if(s[n + 1] == 0)
            {
                strcn[i++] = c[0];
                strcn[i++] = c[1];
            }
            strcn[i++] = c[s[n] * 2];
            strcn[i++] = c[s[n] * 2 + 1];
            if(t = n % 4)
            {
                strcn[i++] = b[t * 2];
                strcn[i++] = b[t * 2 + 1];
            }
        }
        if(n)
        {
            if(n % 8 == 0)
            {
                strcn[i++] = b[10];
                strcn[i++] = b[11];
            }
            else if(n % 4 == 0)
            {
                strcn[i++] = b[8];
                strcn[i++] = b[9];
            }
        }
    }
    strcn[i] = '\0';
    if(!i)
    {
        strcn[0] = c[0];
        strcn[1] = c[1];
        strcn[2] = '\0';
    }
    return strcn;
}

int main()
{
    char s[128];
    int a;
    printf("Try to input a number : ");
    scanf("%d", &a);
    puts(chinese_number(a, s));
    return 0;
}

重剑无锋,大巧不工
2012-11-10 18:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
没明白啥意思 凑热闹来了
2012-11-10 18:57
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
回复 12楼 beyondyf
我晕,你这个程序我在我机子上编译和执行都没问题,但就是输入任何数字都打印出来是乱码?怎么回事?难道和运行环境有关系?求解

[ 本帖最后由 小小战士 于 2012-11-10 19:03 编辑 ]

小小战士,战士中的战斗机!
2012-11-10 18:59
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 14楼 小小战士
将cmd窗口的代码页改成936。具体方法自己搜。

重剑无锋,大巧不工
2012-11-10 19:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用beyondyf在2012-11-10 18:54:24的发言:

首先吧,楼主这段代码想试验个什么还真看不出来。就这么两行也谈不上什么更优秀。

给你演示一个相对实用好玩的功能吧,自己编译执行看看。也许这本就是你想要实现的东西。其实这个更适合用宽字符来做。
#include
 
char * chinese_number(int a, char * strcn)
{
    char * b = "个十百千万亿";
    char * c = "零一二三四五六七八九";
   
    int s[16] = {0}, n, i, t;
   
    for(n = 0; a; a /= 10) s[n++] = a % 10;
   
    for(i = 0, s[n] = 1; n--;)
    {
        if(s[n])
        {
            if(s[n + 1] == 0)
            {
                strcn = c[0];
                strcn = c[1];
            }
            strcn = c[s[n] * 2];
            strcn = c[s[n] * 2 + 1];
            if(t = n % 4)
            {
                strcn = b[t * 2];
                strcn = b[t * 2 + 1];
            }
        }
        if(n)
        {
            if(n % 8 == 0)
            {
                strcn = b[10];
                strcn = b[11];
            }
            else if(n % 4 == 0)
            {
                strcn = b[8];
                strcn = b[9];
            }
        }
    }
    strcn = '\0';
    if(!i)
    {
        strcn[0] = c[0];
        strcn[1] = c[1];
        strcn[2] = '\0';
    }
    return strcn;
}
 
int main()
{
    char s[128];
    int a;
    printf("Try to input a number : ");
    scanf("%d", &a);
    puts(chinese_number(a, s));
    return 0;
}
很好    这本是我下一步的目标  谢了

DO IT YOURSELF !
2012-11-11 06:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
beyondyf斑竹,我略改动了一下你的代码(无他,只为了更好的读懂你的代码)

现在输出都和改动前什么都不差  就是整个字符串前多了一个  

比如:12345=零一万二千三百四十五

多出这个 零  怎么查 也没弄明白

代码如下:
程序代码:
#include<stdio.h>
#include<string.h>

char * chinese_number(int a, char * strcn)
{
    char * b = "个十百千万亿";
    char * c = "零一二三四五六七八九";
  
    int s[16] = {0}, n, i, t;
    //另s[]保存了输入数字的每位元素
    //例:输入a=12345 则s[0..4]分别为5,4,3,2,1
    i=0;
    memset(s,0,sizeof(s));
    while(a)
    {
        s[i]=a % 10;
        a=a/10;
        i++;
    }
    n=i;
    i=0;
    while(1)
    {
         if(n==-1) break;
        n--;
        if(s[n]!=0)
        {
            if(s[n+1] == 0)
            {
                strcn[i++] = c[0];
                strcn[i++] = c[1];
            }
            strcn[i++] = c[s[n] * 2];
            strcn[i++] = c[s[n] * 2 + 1];
            if(t = n % 4)
            {
                strcn[i++] = b[t * 2];
                strcn[i++] = b[t * 2 + 1];
            }
        }
        if(n!=0)
        {
            if(n % 8 == 0)
            {
                strcn[i++] = b[10];
                strcn[i++] = b[11];
            }
            else if(n % 4 == 0)
            {
                strcn[i++] = b[8];
                strcn[i++] = b[9];
            }
        }
    }
    strcn[i] = '\0';
    if(i==0)
    {
        strcn[0] = c[0];
        strcn[1] = c[1];
        strcn[2] = '\0';
    }
    return strcn;
}


int main()
{
    char s[128];
    int a;
    printf("Try to input a number : ");
    scanf("%d", &a);
    puts(chinese_number(a, s));
    return 0;
}

DO IT YOURSELF !
2012-11-11 14:07
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,老哥想怎么改都没关系,只要对你有帮助就好。

相比我以往的风格,这段代码我写的其实很松散了

但有一点是没变的,我的代码里除了空格没有多余的东西。每个语句都有它存在的必要性。

请注意这一句for(i = 0, s[n] = 1; n--;)

在你的改动中删掉了 s[n] = 1 这部分。现在你感觉到它是做什么用的了么?

其实如果理解了下面我是怎么处理零的输出的,也就理解为什么要对s[n]赋一个值了。不一定非得是1,随便一个非零值即可。

重剑无锋,大巧不工
2012-11-11 15:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用beyondyf在2012-11-11 15:04:42的发言:

呵呵,老哥想怎么改都没关系,只要对你有帮助就好。

相比我以往的风格,这段代码我写的其实很松散了

但有一点是没变的,我的代码里除了空格没有多余的东西。每个语句都有它存在的必要性。

请注意这一句for(i = 0, s[n] = 1; n--;)

在你的改动中删掉了 s[n] = 1 这部分。现在你感觉到它是做什么用的了么?

其实如果理解了下面我是怎么处理零的输出的,也就理解为什么要对s[n]赋一个值了。不一定非得是1,随便一个非零值即可。
ok了   其实我就是没发现s[n]=1有啥用  所以就删了

DO IT YOURSELF !
2012-11-11 15:06
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
因为我c代码不是很熟悉
所以相对于    if(s[n])  我就看着不如  if(s[n]!=0)熟悉

DO IT YOURSELF !
2012-11-11 15:09
快速回复:就送20分啊
数据加载中...
 
   



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

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