字符串转整数

  字符串转换为整数的函数有两个,他们的函数原型如下:

 int __cdecl atoi(const char *_Str);long __cdecl atol(const char *_Str);

  这两个函数的用法都很简单,atoi函数将字符串转换为整数int型,atol函数将字符串转换为长整形long int型。如果转换无效,返回值都为0,下面通过一个简单的例子看一下这两个函数的用法。

#include <stdio.h>
#include <stdlib.h>int main(int argc, char** argv)
{int val;long val_l;char str[20];strcpy(str, "1234");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);strcpy(str, "abc");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);strcpy(str, "98993489");val_l = atol(str);printf("\n字符串值 = %s, 长整型值 = %ld\n", str, val_l);strcpy(str, "abc123");val_l = atol(str);printf("字符串值 = %s, 长整型值 = %ld\n", str, val_l);return 0;
}

  给字符串赋不同的值,然后使用,atoi函数和atol函数对字符串进行转换,输出结果如下:

  通过结果可以看出,只有当字符串有效时才能正确的转换成整数,否则转换的结果就为0。

  将字符串转换为整数的函数还有以下两个:

long __cdecl strtol(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix);
unsigned long __cdecl strtoul(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix);

  strtol() 函数用来将字符串转换为长整型数(long),它有三个参数:

  • _Str 为要转换的字符串,
  • _EndPtr 为第一个不能转换的字符的指针,
  • _Radix 为字符串 str 所采用的进制。

   strtol() 函数会将参数str字符串根据参数base来转换成长整型数(long)。参数base范围从236,或0。参数base代表str采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。

  下面通过一个简单的例子演示一下strtol() 函数的用法。

#include <stdio.h>
#include <stdlib.h>int main(int argc, char** argv)
{char str[30] = "123 -456 abc";char *pEnd;long ret1,ret2;ret1 = strtol(str, &pEnd, 10);ret2 = strtol(pEnd, &pEnd, 10);printf("数字1是: %ld\n", ret1);printf("数字2是: %ld\n", ret2);printf("字符串部分是: %s \n", pEnd);return 0;
}

  定义一个字符串,然后使用strtol() 函数转换字符串中的数字,输出结果如下:


  通过打印的结果可以看出,strtol() 函数将字符串中的两个数字都成功换成为整数了。

  当strtol() 函数读取字符串时,读取到第一个空格是,由于空白字符不能转换,所以函数返回,并将空白字符的存储在 pEnd中,接下来从空白位置继续转换,将字符串“-456”转换为数字之后,又遇到了空白字符,不能继续转换,函数退出,将第二个空白字符存储在 pEnd中,最后将剩余的字符串换打印出来。

  通过strtol() 函数就可以智能的将字符串的数字提取出来。

  strtoul 函数用来将字符串转换成无符号长整型数(unsigned long),它的用法和strtol() 函数基本一样。

  修改上面的代码如下:

#include <stdio.h>
#include <stdlib.h>int main(int argc, char** argv)
{char str[30] = "123 456 abc";char *pEnd;long ret1,ret2;ret1 = strtoul(str, &pEnd, 10);ret2 = strtoul(pEnd, &pEnd, 10);printf("数字1是: %lu\n", ret1);printf("数字2是: %lu\n", ret2);printf("字符串部分是: %s \n", pEnd);return 0;
}

  输出结果为:

  如果在字符串的数字前面添加上负号,转换的结果就会出错。

  在使用strtol() 函数和strtoul 函数时要注意两点:

  • base 的值为 0 时,默认采用 10 进制转换,但如果遇到'0x' / '0X'前置字符则会使用 16 进制转换,遇到 '0' 前置字符则会使用 8 进制转换。

  • endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptrNULL,则表示该参数无效,或不使用该参数。

C语言学习笔记---字符串转换函数相关推荐

  1. C语言学习笔记---字符串拼接函数 strcat() 和 strncat()

    strcat()函数    strcat()函数主要用来拼接字符串,用于将一个字符串拼接到另一个字符串的后面.下面通过一个简单的例子来演示一下这个函数的使用方法. int main() {char s ...

  2. C语言学习笔记---字符串查找函数strstr()和strpbrk()函数

    strstr()函数   C语言中如何向查找一个字符串中是否包含另一个字符串,可以使用strstr()函数.使用示例如下: int main(int argc, char *argv[]) {char ...

  3. C语言学习笔记---字符串对比函数strspn()和strcspn()函数

    strspn()函数   如果要对比两个字符串中从第一个字符开始总共有多少个相同字符时,可以使用strspn()函数,它里面有两个参数字符串1和字符串2,从字符串1开始位置依次对比字符串1和字符串2有 ...

  4. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  5. c语言学习笔记之分段函数

    内容来自哔哩哔哩视频 [浙江大学]C语言入门与进阶 翁恺 学习笔记 分段函数 if ( x < 0 ) { f = -1; } else if ( x == 0 ) { f = 0; } els ...

  6. C语言学习笔记---数据拷贝函数memcpy()和memmove()函数

      在C语言中拷贝字符串的时候通常可以使用strcpy()函数和strncpy()函数,这两个函数是专门针对字符串拷贝的.如果想要拷贝其他类型数组的话,可以使用memcpy()和memmove()函数 ...

  7. C学习笔记-字符串处理函数

    字符串函数是最问常用的库函数之一,本文整理了常用的字符串函数,其来源为互联网 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, ...

  8. C语言学习笔记——字符串结束符\0

    C语言中的字符串结束符\0标志着字符串的结束,由编译器自己加上的,ASCII值为0,表示NULL,ASCII中有很多不可见字符由转义字符\和可见字符来标识的,当然可见字符也能用转义字符表示.

  9. Go 语言学习笔记(二):函数

    目录 函数 函数定义 函数签名和匿名函数 defer 闭包 概念 panic 和 recover 函数 函数是程序执行的一个基本语法结构,Go 语言的很多特性是基于函数这个基础实现的,比如命名类型的方 ...

最新文章

  1. 生成N个0~1的随机数,同时这些随机数的和为1
  2. The proof of “chi-square statistics follows chi-square distribution”
  3. 小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV
  4. 为长篇文档快速创建目录
  5. Denoise 方法汇总
  6. 人车物跟踪在另外的机器上跑不起来
  7. android开发练习:天气应用
  8. 跟踪综述推荐:目标跟踪40年
  9. Sentinel2 哨兵2数据下载方法(USGS)-史上最全讲解
  10. C语言关键字分析系列
  11. 企业全面移动化实践指南
  12. Cplusplus实现的爱心代码,爱心里面有三个字李欣怡
  13. 华硕FL5600l拆机
  14. 2012年9月9日参加中国软件开发者大会学习笔记
  15. 【入门数据分析】淘宝用户行为分析
  16. 【嵌入式项目开源】基于ESP32的墨水屏桌面小屏幕
  17. 【性能测试】构造性能测试的数据
  18. 如何在前端实现甘特图?SpreadJS两招搞定
  19. tensorflow 学习率的下降策略
  20. 产品经理与用户体验研究的关系

热门文章

  1. JdbcTemplate的主要用法
  2. 戴尔R410 centos6.3 x64 环境下 网卡驱动故障
  3. 课时22:函数:递归是神马
  4. 比较有意思的老家见闻一二三
  5. 洛谷 p1197 [JSOI2008]星球大战(并查集)
  6. 获取文件的后缀名 和 Process进程
  7. java使用内部类的好处及其初始化
  8. python03_Python中的列表、元组、字典和集合
  9. raster | 多图层栅格对象的一些处理方法
  10. php源生生成pdf_TCPDF - 可生成PDF文档和条形码PHP库