字符串->整数

Title

输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。

Answer

The following code block is a kind of answer:

#include<stdio.h>
#include<stdlib.h>
int char2int(char *str,char* t);
int main(int argc,char const *argv[]){
    char *str=NULL;
    int n;
    char* temp;
    printf("Enter the designed number of chars:");
    scanf("%d",&n);
    str=(char*)malloc(n*sizeof(char));
    gets(temp);
    gets(str);
    int i=char2int(str,temp);
    if(*temp) printf("%d",i);
    free(str);
    return 0;
}
int char2int(char* str,char* t){
    int num=0;
    if(str[0]!='0'){
        while(*str!='\0'){
            if(*str>='0'&&*str<='9'){
                num=(*str-'0')+num*10;
                *t=1;
            }else
            {
                printf("illegal number");
                *t=0;
                break;
            }
            str++;   
        }
    }else
    {
        printf("illegal number");
        *t=0;
    }
    return num;
}

Analysis

The title mainly test if you are familiar with C/C++ by design a task that transform characters to integers. Something worth being mentioned:

include 指令与头文件

#include <文件名>表示在编译程序编译代码之前,预处理器在某些特定的目录中寻找指定的文件.找到该文件后,文件的内容将被插入到#include指令所在的位置.头文件是一个文件,通常是源代码的形式,由编译器在处理另一个源文件的时候自动包含进来。通常被用来唯一指定接口,且多少提供一些文档来说明如何使用在该文件中声明的组件.头文件
系统文件也即头文件stdlib.h包含函数malloc();string.h;stdio.h包含函数scanf()和gets().

###函数原型
如果程序中的函数调用语句出现在函数定义之前,或者调用另外一个文件的函数,那么应该写出函数的原型声明.函数原型的声明的一般形式如下:

类型名 函数名(类型名1 形参1,类型名2 形参2,…)

原型声明语句告诉编译程序该函数的返回值类型、接收的参数个数以及每个参数的类型,如:

int char2int(char* str,char* t);

该语句告诉编译程序char2int是一个函数的名字,该函数的返回值类型为int.char2int()函数接收两个参数,第一个参数的类型为char*,即指向char型变量的指针变量;第二个同理.原型声明语句中的参数名称没有实际用途,可以省略,如:

int char2int(char* , char*);
主函数

main()中的int型变量argc是字符串数组argv[]的长度;argv[]由argc个指向char型数据的指针元素组成,相当于一个二维字符串数组.const在*前决定了不能通过*argv[i]去修改值.

动态存储分配函数malloc()与释放函数free()
  • 前者函数原型是
void* malloc(unsigned size)

Function: 在内存的动态存储去中分配一块连续空间,其长度为size.若申请成功,则返回指向所分配内存空间的起始地址的指针,且为void*类型(通用指针);若申请内存空间不成功,则返回NULL(值为0).而在具体使用中,还需要将malloc()的返回值转换为特定指针类型,赋给一个指针,如:

str=(char*)malloc(n*sizeof(char));\

调用malloc()时,应该利用sizoef计算存储块大小,不要直接写数值,因为不同平台数据类型占用空间大小可能不同.

  • 后者函数原型:
void free (void *ptr)

Funtion:除了一种情况下,释放由动态存储分配函数申请到的整块内存空间,ptr为要释放的首地址.如果ptr的值是空指针,则free什么都不做,这种情况单独存在为了配合初始化用NULL的习惯.该函数无返回值.free()应跟随malloc().

指针

  1. char * str=NULL;将str指针变量初始化为空指针,NULL在一般编译器中是ASCII值为0时的符号.
    指针初始化是一种习惯.因为指针变量必须先赋值后引用.指针如果没有被赋值,它的值是不确定的,即它指向一个不确定的单元,使用这样的指针可能造成操作越界,甚至造成系统错误.不过需要注意不能用数值(除了0之外)作为指针变量的初值,因为地址本身是不便于直接被使用的,使用&取变量地址可以.
  2. 通过指针在函数中返回多个数值: char2int(str,temp),实际形式为:

函数名(实参1,实参2)

这个表达式调用char2int()函数,并将strtemp作为地址参数,指针变量本身,也是字符串的首地址传递给该函数.函数的参数传递按照值引用的方式进行,函数内部的局部变量在出去函数时会被销毁掉,只会有返回值幸存.但是如果给函数传递一个指针参数,就可以在函数内部对该指针指向的位置上面的数据进行修改,尽管不能对实际的指针进行修改,但是实现了一个函数返回多个数值.
3. 通过指针的递增实现对字符串元素的遍历:str++,str+1代表访问的是下一个变量的内存地址,故*(str+1)为字符串中下一个的变量.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值