当前位置:编程学习 > C/C++ >>

将数字字符串转化为整数

题目描述:  若字符串str1为"-1234"
 
                      则输出整数-1234
 
 
 
 
#include<stdio.h>  
#include<assert.h>  
  
int  string_to_number(char*  str)  
{     
    assert( str );  
    int sum = 0; //保存累加的结果  
    int i = 0;  
    int k = 1;  //每个位的权值,从个位开始  
    while(str[i]!='\0')  //统计字符串中字符个数  
    {         
  
            i++;  
    }  
    if(str[0] == '-')  //前面有"-"的情况  
    {  
     //扫描一遍看      
        for(int j =i-1; j > 0; j--)//因为前面有个负号,所以加权的范围是1 ~ i-1  
        {     
            if(str[j] < '0'|| str[j] > '9') //中间如果有非数字字符,就终止  
            {  
                assert(0);  
            }  
            sum += (str[j]-'0')*k;  
            k =k * 10;    
        }  
        return (0 - sum); //将最后的结果取负,返回  
    }  
    else if(str[0] == '+' )//前面有"+"的情况  
    {     
        for(int j =i-1; j > 0; j--)  
        {     
            if(str[j] < '0'|| str[j] > '9')  
            {  
                assert(0);  
            }  
  
            sum += (str[j]-'0')*k;  
            k =k * 10;    
        }  
        return  sum;  
    }  
    else    //前面没有"+","-"的情况  
    {     
        for(int j =i-1; j >= 0; j--)  
        {    
            if(str[j] < '0'|| str[j] > '9')  
            {  
                assert(0);  
            }  
  
            sum += (str[j]-'0')*k;  
            k =k * 10;    
        }  
        return  sum;  
  
    }  
}  
  
int main()  
{     
    //char s[] = "+12~3";  
    //char s[] = "+123";  
    //char s[] = "123";  
    char s[] = "-123";  
    int num = string_to_number(s);  
    printf("%d\n",num);  
    return 0 ;  
}  

 

 
 
参考答案:
 
 
#include <stdio.h>  
#include<malloc.h>  
#include<memory.h>  
#include<assert.h>  
  
int  string_to_number(char*  str)    
{    
   assert(str);  
   int i = 0;  
   while(str[i] != '\0')    //统计这个数字字符串的位数(不包括正负号),结果为i位  
   {     
       if( '-'==str[0] )  //绕过前面的正负号  
       {    
           i++;  
           continue;  
       }  
       if(str[i]<'0' || str[i]>'9' )  //防止非字符串str中出现非数字字符  
           assert(0);  
       i++;  
   }  
     
   int sum = 0; //作为存放整数结果的变量  
    
      
   int k = 1;  
   if( '-'==str[0] )    //负数的情况下  
   {  
     for(int j = i-1 ;j >0 ; j-- ) //将这个数字字符串重组,根据十进制数的原理  
     {     
       sum += k*(str[j]-'0');  
       k = k*10;  
     }  
     sum = 0 -sum;  
   }  
   else                         //正数的情况下  
   {  
       for(int j = i-1 ;j >=0 ; j-- ) //将这个数字字符串重组,根据十进制数的原理  
     {     
       sum += k*(str[j]-'0');  
       k = k*10;  
     }  
   }  
   
   return sum;  
  
  
      
           
      
}  
int main()  
{  
    char str[] ="1234";     
    printf("转化前的数字字符串为%s\n",str);  
  
    int a = string_to_number(str); //a为字符串中第一个出现一次的字母在数组中的位置,0代表没有这样的字符   
      
  
      
    printf("转化后的数字字符串为%d\n",a);   
      
    return 0;  
  
}   

 

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,