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所能存储的范围则会发生溢出现象。

相关文章
|
6月前
|
NoSQL 程序员 Redis
C语言字符串的设计缺陷
C语言字符串的设计缺陷
55 1
|
2月前
|
存储 C语言
C语言:设置地址为 0x67a9 的整型变量的值为 0xaa66
在C语言中,可以通过指针操作来实现对特定地址的访问和赋值。要将地址为 0x67a9 的整型变量值设为 0xaa66,可以先定义一个指向该地址的指针,并通过该指针对该内存位置进行赋值操作。需要注意的是,直接操作内存地址具有一定风险,必须确保地址合法且可写。代码示例应考虑字节序及内存对齐问题。
|
2月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
3月前
|
存储 C语言
【C语言基础考研向】04整型进制转换
本文介绍了计算机中整型常量的不同进制表示,包括二进制、八进制、十六进制和十进制,并解释了它们之间的转换方法。以一个32位整型数为例,展示了其在不同进制下的表示形式及计算方法,特别指出在内存观察中常用十六进制,同时提到了小端存储方式对数据的影响。
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
3月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
186 7
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
106 4
|
3月前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
4月前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
34 4
|
4月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
64 0