首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

H口试程序(13): 将数字字符串转化为整数

2013-09-15 
H面试程序(13): 将数字字符串转化为整数 题目描述:若字符串str1为-1234则输出整数-1234 #includestdio.

H面试程序(13): 将数字字符串转化为整数

 

题目描述:  若字符串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;} 


 

 

热点排行