C语言实现字符串转整型

简介: 1、输入中只包含正负号和数字。2、正负号只只出现在首位。

要求

1、输入中只包含正负号和数字。

2、正负号只只出现在首位。

了解

(1)负号Ascii码为45,正号Ascii码为43。

(2)char型字符与整型转换需要剪48。如将 char a=‘6’,转换位int型,则为 int b=a-48

演示。

(3)如果第一位是符号,则用flag记录 ,最后进行相应的变化。

#include<stdio.h>
int main(){
  char a='6';
  int b=a-48;
  printf("%d",b);
  return 0;
}

输出结果

2345_image_file_copy_113.jpg

基本思想

1、首先遍历字符串s,将其中的每个字符转换成数字,并存储在一个整型数组a中,并记录a的尾部下标。

2、遍历整型数组a,并将每一项乘以相应的数量级并相加。

2345_image_file_copy_114.jpg

如何相乘以对应的数量级,由于从i=0开始遍历整型数组a,所以每一项乘以10的top-i次方。

是有意图如下。

2345_image_file_copy_115.jpg

一边遍历一边求和。

2345_image_file_copy_116.jpg

代码

求10的n次方函数

//10的n次方 
int g(int n){
  int t=1;
  int i;
  if(n==0){//10的0次方等于1
    return 1;
  } else{
    for(i=0;i<n;i++){
      t=t*10;
    }
  }
  return t;
}

字符串s转换为整型函数

int f(char* s){
  int a[100];
  int top=-1;
  int i;
  int flag=0;//如果第一位是符号,则用flag记录 
  int sum=0;//记录最后的返回值 
  for(i=0;s[i]!='\0';i++){//遍历字符串s 
    if(s[i]=='-'||s[i]=='+'){//如果是符号则放入flag中 
      flag=s[0];
    }else{
      top++;
      a[top]=s[i]-48; //字符转整型减48 
    }
  }
  for(int i=0;i<=top;i++){//遍历整型数组a 
    sum=sum+a[i]*g(top-i);//每一项乘以对应的数量级 
  }
  if(flag==45){//判断符号 
    return -1*sum;
  }else{
    return sum;
  }
} 

所有代码

#include<stdio.h>
//10的n次方 
int g(int n){
  int t=1;
  int i;
  if(n==0){
    return 1;
  } else{
    for(i=0;i<n;i++){
      t=t*10;
    }
  }
  return t;
}
int f(char* s){
  int a[100];
  int top=-1;
  int i;
  int flag=0;//如果第一位是符号,则用flag记录 
  int sum=0;//记录最后的返回值 
  for(i=0;s[i]!='\0';i++){//遍历字符串s 
    if(s[i]=='-'||s[i]=='+'){//如果是符号则放入flag中 
      flag=s[0];
    }else{
      top++;
      a[top]=s[i]-48; //字符转整型减48 
    }
  }
  for(int i=0;i<=top;i++){//遍历整型数组a 
    sum=sum+a[i]*g(top-i);//每一项乘以对应的数量级 
  }
  if(flag==45){//判断符号 
    return -1*sum;
  }else{
    return sum;
  }
} 
int main(){
  char s[100];
  scanf("%s",s);
  int a=f(s);
  printf("%d",a);
} 

不足

如果字符串所表示的整型数组超出int所能存储的范围则会发生溢出现象。

相关文章
|
1月前
|
安全 程序员 C语言
探索C语言库函数:字符串拷贝函数strcpy
探索C语言库函数:字符串拷贝函数strcpy
19 0
C4.
|
1月前
|
存储 程序员 C语言
C语言中如何通过指针引用字符串
C语言中如何通过指针引用字符串
C4.
15 0
|
1天前
|
存储 C语言
C语言中字符串的引用与数组元素操作
C语言中字符串的引用与数组元素操作
8 0
|
21天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
21天前
|
C语言
【C语言】第三回 关于字符串,语句和注释的使用2
【C语言】第三回 关于字符串,语句和注释的使用
|
27天前
|
存储 小程序 编译器
C语言数据存储 — 整型篇
C语言数据存储 — 整型篇
20 0
|
1月前
|
安全 程序员 C语言
探索C语言库函数:字符串拷贝函数strcpy()
探索C语言库函数:字符串拷贝函数strcpy()
9 0
|
1月前
|
存储 程序员 C语言
深入理解C语言中的整型数据类型及其应用
深入理解C语言中的整型数据类型及其应用
12 0
|
1月前
|
存储 C语言
C语言字符串
C语言字符串
18 0
C语言字符串
|
1月前
|
安全 Unix Linux
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
15 0