标题:求问一个C语言问题。将八、十和十六进制数字串转换成十进制整数的函数
只看楼主
tony66752928
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-4
结帖率:0
已结贴  问题点数:20 回复次数:4 
求问一个C语言问题。将八、十和十六进制数字串转换成十进制整数的函数
题目:将八、十和十六进制数字串转换成十进制整数的函数
【问题描述】

设计一个名为str2int的函数,它能将八进制数字串(以0为前导)、十进制数字串和十六进制数字串(以0x或0X为前导)转换成 long 型十进制整数。要求在主函数中输入要转换的数字串和输出调用该函数得到的转换结果。

【输入形式】

从键盘输入八进制数字字符串(以0为前导)、十进制数字字符串或十六进制数字字符串(以0x或0X为前导)。

【输出形式】

在主函数中输出将输入的数字串转换成的long型十进制整数。

【样例输入1】

012345

【样例输出1】

5349

【样例输入2】

0x4Ab

【样例输出2】

1195

【样例输入3】

0

【样例输出3】

0


搜索更多相关主题的帖子: 十六进制 十进制 八进制 字符串 C语言 
2011-05-04 22:44
prl111
Rank: 2
等 级:论坛游民
帖 子:3
专家分:15
注 册:2011-5-4
得分:10 
#include "stdafx.h"

int STOI(char s[],int K);

int main(int argc, char* argv[])
{

   
    int x=STOI("3FF",16);    printf("x=%d\n",x);
    x=STOI("123",10);    printf("x=%d\n",x);
    x=STOI("111",2);    printf("x=%d\n",x);
    x=STOI("123",8);    printf("x=%d\n",x);
    return 0;
}

int STOI(char s[],int K)
{
    int x=0,flag=1;
    int i=0;
    while(s[i]==' ')  i++;
    //s[i]!=' '
    if(s[i]=='-')
    { flag=-1; i++; }
    for(; (s[i]>='0' && s[i]<='9')
        ||(s[i]>='A' && s[i]<='F'); i++)
    {   if(s[i]>='0' && s[i]<='9')
           x=x*K+ s[i]-'0';
        else
           x=x*K+ s[i]-'A'+10;
    }
    return flag*x;
}
2011-05-05 23:45
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
得分:10 
/*这个程序是用回来对各种进制之间的转换(2到32),由于我是初学者,所以不考虑小数*/
#include "stdio.h"
#include "math.h"
#include "string.h"
#define N 32
int pow1(int a,int b) /*次函数的功能类似有math.h中的pow,但本函数返回的是整数*/
       { int c;
         if(b==0) return 1;
         if(b>0) c=a*pow1(a,b-1);
         return c;
       }
 void f(int sum,int c,char *p,int i)/*此函数用来确定转换后的数字的各个位数上的数*/
       { int j,n;            
         for(n=i;n>=0;n--)
         for(j=0;j<c;j++)
         if(sum<(pow1(c,n)*(j+1))&&sum>=(pow1(c,n)*j)) { *(p+i-n)=j,sum=sum-pow1(c,n)*j;break;}
         *(p+i+1)=0;
        
       }
int w(int sum,int c)/*此函数用来判断转换后的数字有几位(i+1)*/
       {int i;
        for(i=0; ;i++)
         {
          if((sum<pow1(c,i+1))&&(sum>=pow1(c,i))) break;
         }
        return i;
       }

     
main()
{int a,c,i,sum,j,k,l,flag;
 char b[N]={0},h[32]={0};
 for(;;)
 {sum=0;flag=0;
  printf("***************************************************\n");
  printf("**            ^_^  WELCOME  ^_^                  **\n");
  printf("***************************************************\n");
  for(;;)
  { flag=0;
    printf("\n      请输入你所要转换的整数(输入0退出):");
    scanf("%s",b);  l=strlen(b);   if(!strcmp(b,"0")) break;
    for(i=0;b[i]!=0;i++)  /*由于输入的是字符,所以用以下转换*/
    {  if(b[i]>='0'&&b[i]<='9')
          b[i]-='0';
       if(b[i]>='a'&&b[i]<='z')
          b[i]=b[i]-'a'+10;
       if(b[i]>='A'&&b[i]<='Z')
          b[i]=b[i]-'A'+10;
    }
    for(;;)
       { printf("\n        你所输入的数的进制为(2到32):");
         scanf("%d",&a);
         if(a<2||a>32)
          {printf("\n          您的输入有误,请重新输入!\n");
           continue;
          }
         break;
        }
    for(i=0;i<l;i++)
      if(b[i]>=a)  
         {printf("\n          您的输入有误,请重新输入!\n");
          flag=1;
          break;
         }
    if(flag==1) continue;
    break;
  }
  if(!strcmp(b,"0")) break;
  for(;;)
   {
    printf("\n请输入你要把该数转换为的进制(2到32):");
     scanf("%d",&c);
    if(c<2||c>32)
       {printf("\n          您的输入有误,请重新输入!\n");
        continue;
       }
    break;
   }   
  for(j=0;j<l;j++)
     sum=sum+pow1(a,j)*b[l-j-1]; /*把输入的数字转换为十进制数*/
  if(c==10)
    {printf("\n   把该数字从%d进制转化到%d 进制为:%d",a,c,sum);
     continue;
    }
  i=w(sum,c); /*判断最高位*/
  f(sum,c,h,i);
   for(k=i;k>=0;k--) /*以下转换是把相应的数字转换为字符*/
    {  if(h[k]>=0&&h[k]<=9)
          {h[k]=h[k]+'0';continue;}
       if(h[k]>=10&&h[k]<=35)
          {h[k]=h[k]+55;continue;}
    }
   printf("\n   把该数字从%d进制转化到%d 进制为:",a,c);puts(h);
 }
}
各进制之间的转换.rar (32.7 KB)

人得一生得奋斗!
2011-05-06 11:53
tony66752928
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-4
得分:0 
还是不行呢。有错误
2011-05-18 12:48
sooguo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-12-22
得分:0 
2015-12-22 20:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-338817-1-1.html




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

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