一起来学习C语言的字符串转换函数

字符串转整数

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

	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 所采用的进制。

trtol() 函数会将参数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 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • ORACLE常用数值函数、转换函数、字符串函数

    本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数.分二类介绍,分别是: 著名函数篇 -经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式. 单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句. (一).数值型函数(Number Functions) 数值型函数输入数字型参

  • 关于PHP中字符串与多进制转换函数的实例代码

    转换函数 /** * [字符串转换为(2,8,16进制)ASCII码] * @param string $str [待处理字符串] * @param boolean $encode [字符串转换为ASCII|ASCII转换为字符串] * @param string $intType [2,8,16进制标示] * @return string byte_str [处理结果] * @author alexander */ function strtoascii($str, $encode=true,

  • php的数组与字符串的转换函数整理汇总

    1.将一个字符串转化为数组str_split()用于将一个字符串转化为数组语法: 复制代码 代码如下: str_split(string,length)<SPAN style="COLOR: #333333"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">//</SPAN></SPAN></SPAN>s

  • asp.net 字符串、二进制、编码数组转换函数

    1.字符串转二进制数组 string content="这是做个测试!"; System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding(); byte[] byteArr = converter.GetBytes(content); 2.二进制数组转为字符串 复制代码 代码如下: System.Text.UnicodeEncoding converter = new System.Text.Unicod

  • 几个有用的php字符串过滤,转换函数代码

    nl2br();// \n to addslashes(); stripslashes();//对数据库操作时,转义特殊字符 chop();//除去字符串右边空格 trim();//除去字符串中所有空格 ltrim();//除去字符串左边空格 htmlspecialchars();//转换'$','"','<','>'为相应的html实体 htmlentities();//转换所有html标记为相应的html实体 array explode(string separator, str

  • JavaScript 字符串与数组转换函数[不用split与join]

    两个自定义的实现字符串与数组相互转换的js函数,希望能对大家有用: 复制代码 代码如下: function StringToArray(str,substr) { /* 函数功能:字符串按照指定字符串分割转换为数组 参数: str :需转换的字符串 substr:分割字符串 返回值: 转换后的数组 */ var arrTmp = new Array(); if(substr=="") { arrTmp.push(str); return arrTmp; } var i=0, j=0,

  • 一起来学习C语言的字符串转换函数

    字符串转整数 字符串转换为整数的函数有两个,他们的函数原型如下: int __cdecl atoi(const char *_Str); long __cdecl atol(const char *_Str); 这两个函数的用法都很简单,atoi函数将字符串转换为整数int型,atol函数将字符串转换为长整形long int型.如果转换无效,返回值都为0,下面通过一个简单的例子看一下这两个函数的用法. #include <stdio.h> #include <stdlib.h> i

  • 从头学习C语言之字符串处理函数

    目录 字符串处理函数: 存放和使用字符串: 获取字符串长度:strlen 示例: 拷贝字符串:strcpy和strncpy 示例: strncpy: 示例: 连接字符串:strcat和strncat 示例: 比较字符串:strcmp和ctrncmp strncmp和strcmp和区别: 示例: 总结 字符串处理函数: 存放和使用字符串: 字符串常量:“fishc”,“小甲鱼”,“鱼C工作室”字符数组: 获取字符串长度:strlen 用法:strlen(str) 注意: 这个函数获得的是长度(不带

  • C语言实现字符串操作函数的实例

    C语言实现字符串操作函数的实例 在编写程序的过程中,我们经常使用到一些字符串函数,例如求字符串长度,拷贝字符串--,这些函数都在C标准库中存在,我们可以直接使用.但我们还需要掌握这些函数的实现方法,今天来看看一些常用的字符串操作函数的实现方法. 1.strlen strlen是用来求字符串长度的函数,字符串长度就是它所包含的字符个数. 今天给大家介绍三种实现strlen函数的方法 (1)定义一个计数器count //方式一:定义一个计数器 size_t my_strlen(const char

  • 浅谈C语言之字符串处理函数

    下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数--输出字符串的函数 一般的形式为puts(字符串组) 作用:将一个字符串输出到终端.如,char一个string,并赋予初值.调用puts(string);进行字符串的输出. 2.gets函数--输入字符串的函数 一般的形式:gets(字符数组) 作用:从终端输入一个字符串到字符数组,并且得到一个函数值成为字符数组的起始地址. gets(str); 键盘输入,

  • c语言中字符串分割函数及实现方法

    1.问题引入 自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c",要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的问题,虽然最后调通了,不过确浪费了不少时间:后来作业交上去以后又仔细阅读了strtok函数,发现原来linux下已经改成strsep,所有在这里就写一下自己所走的过程. 2.自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a

  • C语言实现时区转换函数的实例

    C语言实现时区转换函数的实例 时区转换函数 功能: 把时区1的时间转换成时区2的时间 参数: arg1 -- 输入时间 arg2 -- 时区1(也是arg1当前时间所在的时区) arg3 -- 时区2(要转换的时区的时间) 要求: 参数arg1类型可为timestamp 24个时区(由1-24表示) 在 pg_proc.h 中添加函数定义 src/include/catalog/pg_proc.h DATA(insert OID = 6668 ( timezone_convert PGNSP P

  • C语言中字符串常用函数strcat与strcpy的用法介绍

    strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串.返回指向dest的指针.函数实现: 复制代码 代码如下: /********************** * C语言标准库函数strcpy的一种典型的工业级的

  • 详解C语言对字符串处理函数的实现方法

    目录 strlen: 1.计数器版本: 2.递归的版本 3.指针-指针版本 strcat: strcmp: 总结 strlen: 1.计数器版本: #include<stdio.h> #include<string.h> #include<assert.h> int my_strlen(const char *str) { int count =0; assert(str!=NULL); while(*str!='\0') { count++; str++; } ret

  • 详解C语言内核字符串转换方法

    在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING,这两种格式是微软推出的安全版本的字符串结构体,也是微软推荐使用的格式,通常情况下ANSI_STRING代表的类型是char *也就是ANSI多字节模式的字符串,而UNICODE_STRING则代表的是wchar*也就是UNCODE类型的字符,如下文章将介绍这两种字符格式在内核中是如何转换的. 在内核开发模式下初始化字符串也需要调用专用的初始化函数,如下分别初始化ANSI和UNCODE字符串,我们来看看代码是如何实现

  • GO语言入门学习之基本数据类型字符串

    目录 字符串 字符串转义符 byte和rune类型 修改字符串 类型转换 总结 字符串 Go语言中的字符串以原生数据类型出现. Go 语言里的字符串的内部实现使用UTF-8编码. 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符 GO语言中字符串是用双引号包裹的 GO语言中单引号包裹的是字符 // 字符串 s := "Hello 中国" // 单独的字母.汉字.符合表示一个字符 c1 := 'h' c2 := '1' c3 := '中' //

随机推荐