鱼C论坛

 找回密码
 立即注册
查看: 4353|回复: 8

这段代码请大家看看!!谢谢

[复制链接]
发表于 2013-5-19 23:09:06 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 雪山的肥猫 于 2013-5-20 15:25 编辑

对于一个里面含有数字字符的字符串(长度小于200),现在将连续的数字字符组成的整数转化为16进制输出
Sample Inputa123v456U17960?302tab5876
Sample Output7B  1C8  4628  12E  16F4
  1. #include<stdio.h>
  2. #include<string.h>
  3. int f(char c)
  4. {
  5. if(c>='0'&&c<='9')
  6. return 1;
  7. else
  8. return 0;
  9. }
  10. int y(long int n)
  11. {
  12. int i,k,b[201];
  13. if(n!=0)
  14. {
  15. k=0;
  16. while(n>0)
  17. {
  18. b[k++]=n%16;
  19. n=n/16;
  20. }
  21. for(i=k-1;i>=0;i--)
  22. printf("%c", b/10>0 ? b-10+'A': b+'0');
  23. printf("\n");
  24. }
  25. else
  26. printf("0\n");
  27. return 0;
  28. }
  29. int main()
  30. {
  31. char s[201];
  32. long int i,a[201],len;
  33. while(scanf("%s",s)!=EOF)
  34. {
  35. len=strlen(s);
  36. int k=0;
  37. long int g=0;
  38. for(i=0;i<len;i++)
  39. {
  40. if(f(s)==1)
  41. g=g*10+(s-'0');
  42. if(i==len||f(s)==1&&f(s[i+1])==0)(这是提交的代码。i==len我是看不懂了,i始终应该小于等于len-1的呀,但是如果改成i==len-1的话就会报错的。请大家看看)
  43. {
  44. a[k++]=g;
  45. g=0;
  46. }
  47. }
  48. for(i=0;i<k;i++)
  49. y(a);
  50. }
  51. return 0;
  52. }
复制代码

最佳答案

查看完整内容

贴出来的代码错误太多了点,我改了下,代码如下:结果如图:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 23:09:07 | 显示全部楼层
贴出来的代码错误太多了点,我改了下,代码如下:
  1. #include<stdio.h>
  2. #include<string.h>

  3. int f(char c)
  4. {
  5.         if(c >= '0'&&c <= '9')
  6.         {
  7.                 return 1;
  8.         }
  9.                
  10.         return 0;
  11. }

  12. int y(long int n)
  13. {
  14.         int i = 0 ;
  15.         int k = 0;
  16.         int b[201] = {0};
  17.         memset(b,0,201);

  18.         if(n!=0)
  19.         {
  20.                 k=0;
  21.                 while(n>0)
  22.                 {
  23.                         b[k++]=n%16;
  24.                         n=n/16;
  25.                 }
  26.                 for(i=k-1;i>=0;i--)
  27.                 {
  28.                         printf("%c", (b[i]/10)>0 ? b[i]-10+'A': b[i]+'0');
  29.                 }
  30.                        
  31.                 printf("\n");
  32.         }
  33.         else
  34.         {
  35.                 printf("\n");
  36.         }
  37.                
  38.         return 0;
  39. }




  40. int _tmain(int argc, _TCHAR* argv[])
  41. {
  42.         long int i = 0;
  43.         int len = 0;

  44.         char s[201] = {0};
  45.         int a[201] = {0};
  46.         memset(s,0,201);
  47.         memset(a,0,201);

  48.         printf("请输入要转换的字符串:");
  49.         scanf("%s",s);

  50.                 len=strlen(s);
  51.                 int k=0;
  52.                 long int g=0;

  53.                 //这个for循环为了计算数字字符所代表的整数,比如字符“123”,代表十进制的123,把123给long int g,
  54.                 //然后在把所得的整数存入数组a中
  55.                 for(i=0;i<len;i++)
  56.                 {
  57.                         //如果s[i]为数字字符
  58.                         if(f(s[i])==1)
  59.                         {
  60.                                 g=g*10+(s[i]-'0');
  61.                         }
  62.                                
  63.                         if(i==len-1 || (f(s[i])==1&&f(s[i+1])==0))
  64.                         {
  65.                                 a[k++]=g;
  66.                                 g=0;
  67.                         }
  68.                 }

  69.                 for(i = 0;i < k;i++)
  70.                 {
  71.                         y(a[i]);
  72.                 }
  73.                        

  74.         int nQuit = 0;
  75.          while (1 != nQuit)
  76.          {
  77.                  printf("请输入1退出:");
  78.                  scanf("%d",&nQuit);
  79.          }
  80.         return 0;
  81. }
复制代码
结果如图:
1111111111.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 23:35:04 | 显示全部楼层
建议用代码格式发帖,可以看的更清楚
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 03:59:34 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 13:15:26 | 显示全部楼层
你用了格式发出来的代码不是i = len-1吗?
这句应该是判断最后一位是不是数字的情况。

不知道我的理解对不对哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-20 15:23:03 | 显示全部楼层
本帖最后由 雪山的肥猫 于 2013-5-20 15:25 编辑
熊文杰 发表于 2013-5-20 02:59
贴出来的代码错误太多了点,我改了下,代码如下:结果如图:
我用的是vc,编译没错呀!!!!我算法上也是认为该是len-1的但是改成len-1的话就无法提交的。只有len才成功。我是不解呀!

  1. #include<stdio.h>
  2. #include<string.h>
  3. int f(char c)
  4. {
  5.     if(c>='0'&&c<='9')
  6.     return 1;
  7.     else
  8.     return 0;
  9. }
  10. int y(long int n)
  11. {
  12.     int i,k,b[201];
  13.     if(n!=0)
  14.     {
  15.         k=0;
  16.         while(n>0)
  17.         {
  18.             b[k++]=n%16;
  19.             n=n/16;
  20.         }
  21.         for(i=k-1;i>=0;i--)
  22.         printf("%c", b/10>0 ? b-10+'A': b+'0');
  23.         printf("\n");
  24.     }
  25.     else
  26.     printf("0\n");
  27. return 0;
  28. }
  29. int main()
  30. {
  31.     char s[201];
  32.     long int i,a[201],len;
  33.     while(scanf("%s",s)!=EOF)
  34.     {
  35.         len=strlen(s);
  36.         int k=0;
  37.         long int g=0;
  38.         for(i=0;i<len;i++)
  39.         {
  40.             if(f(s)==1)
  41.             g=g*10+(s-'0');
  42.             if(i==len||f(s)==1&&f(s[i+1])==0)(这是提交的代码。i==len我是看不懂了,i始终应该小于等于len-1的呀,但是如果改成i==len-1的话就会报错的。请大家看看)
  43.             {
  44.                 a[k++]=g;
  45.                 g=0;
  46.             }
  47.         }
  48.         for(i=0;i<k;i++)
  49.         y(a);
  50.     }
  51.     return 0;
  52. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 17:40:59 | 显示全部楼层
雪山的肥猫 发表于 2013-5-20 15:23
我用的是vc,编译没错呀!!!!我算法上也是认为该是len-1的但是改成len-1的话就无法提交的。只有len才成功 ...

我不知道为什么你那边编译会没有错,反正我复制你的代码之后有几个很明显的错误,我这里说下 你代码里面几个错误的地方。如果你看了我贴出来的代码 你应该知道我改了哪些地方,也就是在你的代码基础上改了一点点语法和逻辑错误。

首先说第一个
if(f(s)==1) 这一句,你看看你的函数是什么int f(char c),但是你却给他传了一个char *类型进去,这是第一个错误

第二,g=g*10+(s-'0'); s是一个数组指针,你的意图应该是想用s中的第i个字符减去‘0’吧,这是第二个错误

第三,y(a);这句,这里的调用也是同样的错误,声明是int y(long int n),你却传进去一个int *类型。

第四,printf("%c", b/10>0 ? b-10+'A': b+'0');  这里b/10,b是一个数组指针,你的意图是想操作b中的第i个字符。

这4个是语法错误。

第五个,逻辑错误,
        while(scanf("%s",s)!=EOF)
        {
····························
        }

这个while根本就是没有必要的。会死循环的。。。。。。


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 17:42:46 | 显示全部楼层
len确实是要改成len-1,但是这个不是你编译不过的问题所在。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-20 19:09:09 | 显示全部楼层
熊文杰 发表于 2013-5-20 17:42
len确实是要改成len-1,但是这个不是你编译不过的问题所在。

代码我看了下。是我复制错了。但你指出的错误也确实很实在,首先谢谢你啦!!!len/len-1那里就算了但我是有人和我想一起的好。谢谢啦~!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-28 05:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表