2014-12-16 21:53:13 u013018721 阅读数 386
  • PHP7字符串模块

    King老师精心打造的PHP7字符串实战课程,由浅入深的讲解了PHP中字符串模块,并介绍了一些常用的字符串相关操作,让我们一起开启字符串之旅吧~ 山哥出品,必属精品!

    15547 人正在学习 去看看 何山

函数讲解部分参考http://net.pku.edu.cn/~yhf/linux_c/





atof(将字符串转换成浮点型数)
相关函数
atoi,atol,strtod,strtol,strtoul
表头文件
#include <stdlib.h>
定义函数
double atof(const char *nptr);
函数说明
atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值
返回转换后的浮点型数。
附加说明
atof()与使用strtod(nptr,(char**)NULL)结果相同。
范例
/* 将字符串a 与字符串b转换成数字后相加*/
#include<stdlib.h>
main()
{
char *a=”-100.23”;
char *b=”200e-2”;
float c;
c=atof(a)+atof(b);
printf(“c=%.2f\n”,c);
}
执行
c=-98.23
 



atoi(将字符串转换成整型数)
相关函数
atof,atol,atrtod,strtol,strtoul
表头文件
#include<stdlib.h>
定义函数
int atoi(const char *nptr);
函数说明
atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
返回值
返回转换后的整型数。
附加说明
atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。
范例
/* 将字符串a 与字符串b转换成数字后相加*/
#include<stdlib.h>
mian()
{
char a[]=”-100”;
char b[]=”456”;
int c;
c=atoi(a)+atoi(b);
printf(c=%d\n”,c);
}
执行
c=356
 



atol(将字符串转换成长整型数)
相关函数
atof,atoi,strtod,strtol,strtoul
表头文件
#include<stdlib.h>
定义函数
long atol(const char *nptr);
函数说明
atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
返回值
返回转换后的长整型数。
附加说明
atol()与使用strtol(nptr,(char**)NULL,10);结果相同。
范例
/*将字符串a与字符串b转换成数字后相加*/
#include<stdlib.h>
main()
{
char a[]=”1000000000”;
char b[]=” 234567890”;
long c;
c=atol(a)+atol(b);
printf(“c=%d\n”,c);
}
执行
c=1234567890
 



gcvt(将浮点型数转换为字符串,取四舍五入)
相关函数
ecvt,fcvt,sprintf
表头文件
#include<stdlib.h>
定义函数
char *gcvt(double number,size_t ndigits,char *buf);
函数说明
gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。
返回值
返回一字符串指针,此地址即为buf指针。
附加说明

范例
#include<stdlib.h>
main()
{
double a=123.45;
double b=-1234.56;
char *ptr;
int decpt,sign;
gcvt(a,5,ptr);
printf(“a value=%s\n”,ptr);
ptr=gcvt(b,6,ptr);
printf(“b value=%s\n”,ptr);
}
执行
a value=123.45
b value=-1234.56
 



strtod(将字符串转换成浮点数)
相关函数
atoi,atol,strtod,strtol,strtoul
表头文件
#include<stdlib.h>
定义函数
double strtod(const char *nptr,char **endptr);
函数说明
strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。
返回值
返回转换后的浮点型数。
附加说明
参考atof()。
范例
/*将字符串a,b,c 分别采用10,2,16 进制转换成数字*/
#include<stdlib.h>
mian()
{
char a[]=”1000000000”;
char b[]=”1000000000”;
char c[]=”ffff”;
printf(“a=%d\n”,strtod(a,NULL,10));
printf(“b=%d\n”,strtod(b,NULL,2));
printf(“c=%d\n”,strtod(c,NULL,16));
}
执行
a=1000000000
b=512
c=65535
 



strtol(将字符串转换成长整型数)
相关函数
atof,atoi,atol,strtod,strtoul
表头文件
#include<stdlib.h>
定义函数
long int strtol(const char *nptr,char **endptr,int base);
函数说明
strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明
ERANGE指定的转换字符串超出合法范围。
范例
/* 将字符串a,b,c 分别采用10,2,16进制转换成数字*/
#include<stdlib.h>
main()
{
char a[]=”1000000000”;
char b[]=”1000000000”;
char c[]=”ffff”;
printf(“a=%d\n”,strtol(a,NULL,10));
printf(“b=%d\n”,strtol(b,NULL,2));
printf(“c=%d\n”,strtol(c,NULL,16));
}
执行
a=1000000000
b=512
c=65535
 



strtoul(将字符串转换成无符号长整型数)
相关函数
atof,atoi,atol,strtod,strtol
表头文件
#include<stdlib.h>
定义函数
unsigned long int strtoul(const char *nptr,char **endptr,int base);
函数说明
strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明
ERANGE指定的转换字符串超出合法范围。
范例
参考strtol()
 



toascii(将整型数转换成合法的ASCII 码字符)
相关函数
isascii,toupper,tolower
表头文件
#include<ctype.h>
定义函数
int toascii(int c)
函数说明
toascii()会将参数c转换成7位的unsigned char值,第八位则会被清除,此字符即会被转成ASCII码字符。
返回值
将转换成功的ASCII码字符值返回。
范例
#include<stdlib.h>
main()
{
int a=217;
char b;
printf(“before toascii () : a value =%d(%c)\n”,a,a);
b=toascii(a);
printf(“after toascii() : a value =%d(%c)\n”,b,b);
}
执行
before toascii() : a value =217()
after toascii() : a value =89(Y)
 



tolower(将大写字母转换成小写字母)
相关函数
isalpha,toupper
表头文件
#include<stdlib.h>
定义函数
int tolower(int c);
函数说明
若参数c为大写字母则将该对应的小写字母返回。
返回值
返回转换后的小写字母,若不须转换则将参数c值返回。
附加说明

范例
/* 将s字符串内的大写字母转换成小写字母*/
#include<ctype.h>
main()
{
char s[]=”aBcDeFgH12345;!#$”;
int i;
printf(“before tolower() : %s\n”,s);
for(i=0;I<sizeof(s);i++)
s[i]=tolower(s[i]);
printf(“after tolower() : %s\n”,s);
}
执行
before tolower() : aBcDeFgH12345;!#$
after tolower() : abcdefgh12345;!#$
 



toupper(将小写字母转换成大写字母)
相关函数
isalpha,tolower
表头文件
#include<ctype.h>
定义函数
int toupper(int c);
函数说明
若参数c为小写字母则将该对映的大写字母返回。
返回值
返回转换后的大写字母,若不须转换则将参数c值返回。
附加说明

范例
/* 将s字符串内的小写字母转换成大写字母*/
#include<ctype.h>
main()
{
char s[]=”aBcDeFgH12345;!#$”;
int i;
printf(“before toupper() : %s\n”,s);
for(i=0;I<sizeof(s);i++)
s[i]=toupper(s[i]);
printf(“after toupper() : %s\n”,s);
}
执行
before toupper() : aBcDeFgH12345;!#$
after toupper() : ABCDEFGH12345;!#$



linux实例代码如下:

#include <stdio.h>

#include <stdlib.h>



void atof_fun();//string reverse to float

void atoi_fun();//string reverse to int

void atol_fun();//string reverse to long int

void gcvt_fun();//float reverse to string

void strtod_fun();//string reverse to float

void strtol_fun();//string reverse to long int

void toascii_fun();//int reverse to ascii

void tolower_fun();//such as A reverse a;

void toupper_fun();//such as a reverse A;


int main()

{
	
	int Index;

	
	printf("1.atof---string reverse to float\n");
	
	printf("2.atoi---string reverse to int\n");
	
	printf("3.atol---string reverse to long int\n");
	
	printf("4.gcvt---float reverse to string\n");
	
	printf("5.strtod---string reverse to float\n");

	printf("6.strtol---string reverse to long int\n");
	
	printf("7.toascii---int reverse to ascii\n");
	
	printf("8.tolower---such as A reverse to a\n");
	
	printf("9.toupper---such as a reverse to A\n");
	
	printf("0.Exit\n");
	
	while(1)
	
	{
		
		printf("Please choose the function you want done(0-exit):\n");
		
		scanf("%d",&Index);
		
		if(Index==0)
		
		{
			
			printf("Bye Bye\n");
			
			break;
		
		}
		
		else
		
		{
			
			switch(Index)
			
			{
				
				case 1:atof_fun();
					   
					break;
				
				case 2:atoi_fun();
					   
					break;
				
				case 3:atol_fun();
					   
					break;
				
				case 4:gcvt_fun();
					   
					break;
				
				case 5:strtod_fun();
					   
					break;
				
				case 6:strtol_fun();
					   
					break;
				
				case 7:toascii_fun();
					   
					break;
				
				case 8:tolower_fun();
					   
					break;
				
				case 9:toupper_fun();
						
					break;
				
				default:
						
					break;
			
			}
		
		}
	
	}
	
   return 0;

}



//string reverse to float

void atof_fun()

{
	
	char a[20];
	
	char b[20];

	
	printf("Please input the string a:\n");
	
	scanf("%s",a);
	
	printf("Please input the string b:\n");
	
	scanf("%s",b);

	
	float c;
	
	c=atof(a)+atof(b);
	
	printf("float number c=%.2f\n",c);

}



//string reverse to int

void atoi_fun()

{
	
	char a[20];
	
	char b[20];
	
	printf("Please input the string a:\n");
	
	scanf("%s",a);
	
	printf("Please input the string b:\n");
	
	scanf("%s",b);

	

	int c;
	
	c=atoi(a)+atoi(b);
	
	printf("int number c=%d\n",c);
}



//string reverse to long int

void atol_fun()

{
	
	char a[20];
	
	char b[20];
	
	printf("Please input the string a:\n");
	
	scanf("%s",a);
	
	printf("Please input the string b:\n");
	
	scanf("%s",b);

	

	long c;
	
	c=atol(a)+atol(b);
	

	printf("long int number c=%ld\n",c);

}



//float reverse to string 

void gcvt_fun()

{
	
	double a;
	
	int aIndex;
	
	double b;
	
	int bIndex;
	
	printf("Please input a and aIndex:\n");
	
	scanf("%lf,%d",&a,&aIndex);
	
	printf("Please input b and bIndex:\n");
	
	scanf("%lf,%d",&b,&bIndex);

	
	char str[20];
	
	gcvt(a,aIndex,str);
	
	printf("%lf reverse to string---%s\n",a,str);
	
	gcvt(b,bIndex,str);
	
	printf("%lf reverse to string---%s\n",b,str);

}



//string reverse to float

void strtod_fun()

{
	
	char a[20],*ptr;
	
	double value;

	
	printf("Please input a string:\n");
	
	scanf("%s",a);
	
	
	value=strtod(a,&ptr);
	
	printf("The string is %s the number is %lf\n",a,value);

}

//string reverse to long int

void strtol_fun()

{
	
	char a[20],*ptr;
	
	long int value;

	
	printf("Please input a string\n");
	
	scanf("%s",a);

	value=strtol(a,&ptr,10);
	
	printf("The string is %s the number is %ld\n",a,value);

}



//int reverse to ascii
void toascii_fun()

{
	
	int a;
	
	char b;

	
	printf("Please input the non-ascii number a:\n");
	
	scanf("%d",&a);
	
	b=toascii(a);

	
	printf("Before ascii---(%d)to(%c)\n",a,a);
	
	printf("After ascii---(%d)to(%c)\n",a,b);

}



//A reverse to a

void tolower_fun()

{
	char a[40];
	
	int i;
	
	printf("Please input the string of a:\n");
	
	scanf("%s",a);

	
	printf("Before tolower:%s\n",a);

	
	for(i=0;a[i]!=0;i++)
	
	{
		
		a[i]=tolower(a[i]);
	
	}

	

	printf("After tolower:%s\n",a);

}



//a reverse to A

void toupper_fun()

{
	char a[40];
	
	int i;
	
	printf("Please input the string of a:\n");
	

	scanf("%s",a);

	
	printf("Before toupper:%s\n",a);

	
	for(i=0;a[i]!=0;i++)
	
	{
		
		a[i]=toupper(a[i]);
	
	}

	
	printf("After toupper:%s\n",a);

}


运行结果:



转载请注明:小刘

2013-07-16 14:40:28 hunanchenxingyu 阅读数 2389
  • PHP7字符串模块

    King老师精心打造的PHP7字符串实战课程,由浅入深的讲解了PHP中字符串模块,并介绍了一些常用的字符串相关操作,让我们一起开启字符串之旅吧~ 山哥出品,必属精品!

    15547 人正在学习 去看看 何山
Linux内核中提供的一些字符串转换函数:

lib/vsprintf.c

  1.  1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)    
  2.  2. unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)    
  3.  3. long simple_strtol(const char *cp, char **endp, unsigned int base)    
  4.  4. long long simple_strtoll(const char *cp, char **endp, unsigned int base)    
  5.  5. int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)    
  6.  6. int strict_strtol(const char *cp, unsigned int base, long *res)    
  7.  7. int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)    
  8.  8. int strict_strtoll(const char *cp, unsigned int base, long long *res)    
  9.  9. int sprintf(char *buf, const char *fmt, ...)    
  10. 10. int snprintf(char *buf, size_t size, const char *fmt, ...)    
  11. 11. int sscanf(const char *buf, const char *fmt, ...)    

unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成unsigend long long型数据。
返回:返回转换后数据。

参数:cp指向字符串的开始,endp指向分析的字符串末尾的位置,base为要用的基数(进制数),base为0表示通过cp来自动判断基数,函数自动可识别的基数:‘0x’表示16进制,‘0’表示8进制,其它都认定为10进制。函数可转换成数字的有效字符为:[0,f]。举例:cp = “0x12str”,base = 0,则返回unsigned long long为18,*endp = “str”。 参数下同。

  1. static ssize_t led_brightness_store(struct device *dev,  
  2.         struct device_attribute *attr, const char *buf, size_t size)  
  3. {  
  4.     struct led_classdev *led_cdev = dev_get_drvdata(dev);  
  5.     ssize_t ret = -EINVAL;  
  6.     char *after;  
  7.     unsigned long state = simple_strtoul(buf, &after, 10);  
  8.     size_t count = after - buf;  
  9.   
  10.     if (isspace(*after))  
  11.         count++;  
  12.   
  13.     if (count == size) {  
  14.         ret = count;  
  15.   
  16.         if (state == LED_OFF)  
  17.             led_trigger_remove(led_cdev);  
  18.         led_set_brightness(led_cdev, state);  
  19.     }  
  20.   
  21.     return ret;  
  22. }  


unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成unsigend long型数据。
返回:返回转换后数据。

int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
功能:将一个字符串转换成unsigend long型。
返回:转换成功返回0,否则返回负。res指向转换后的unsigned long数据。

说明:该函数对cp指向的字符串严格要求,cp指向的字符串必须为真正的unsigned long形式的字符串。字符串必须以“0x”、“0”、[0,f]开始,中间全部为有效的字符[0,f],否则返回为负。它会处理字符串最后的“\n”字符。下同


long long simple_strtoll(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成sigend long long型。
返回:返回转换后数据。


int strict_strtol(const char *cp, unsigned int base, long *res)
功能:将一个字符串转换sigend long型。
返回:转换成功返回0,否则返回负。res指向转换后的signed long数据。

int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)
功能:将一个字符串转换unsigend long long型。
返回:转换成功返回0,否则返回负。res指向转换后的unsigned long long数据。

int strict_strtoll(const char *cp, unsigned int base, long long *res)
功能:将一个字符串转换sigend long long型。
返回:转换成功返回0,否则返回负。res指向转换后的signed long long数据。

int sprintf(char *buf, const char *fmt, ...)
功能:格式化输出字符串,类似于printf,只是用字符串buf作为输出对象。
返回:返回写入buf字符串的字符个数。

int snprintf(char *buf, size_t size, const char *fmt, ...)
功能:格式化输出字符串,类似于printf,只是用字符串buf作为输出对象。其中size为buf的大小(包括‘\0’字符)。
返回:返回写入buf字符串的字符个数。

int sscanf(const char *buf, const char *fmt, ...)
功能:格式化输入字符串,类似于scanf,只是用字符串buf作为输入对象。
返回:返回读取buf字符串的字符个数。


lib/kasprintf

  1. char *kasprintf(gfp_t gfp, const char *fmt, ...)  
  1. char *kasprintf(gfp_t gfp, const char *fmt, ...)  

char *kasprintf(gfp_t gfp, const char *fmt, ...)
功能:格式化输出字符串到一段且gfp分配的内存中。
返回:返回指向该内容的字符串指针。
2019-07-17 12:58:01 weixin_44983653 阅读数 32
  • PHP7字符串模块

    King老师精心打造的PHP7字符串实战课程,由浅入深的讲解了PHP中字符串模块,并介绍了一些常用的字符串相关操作,让我们一起开启字符串之旅吧~ 山哥出品,必属精品!

    15547 人正在学习 去看看 何山

字符串处理工具

Linux bash内部拥有强大的字符串处理功能,具体功能按章节进行叙述。

1.字符串切片

语法格式:
# ${var:offset:number}
	# 取字符串的子串
		# offset:偏移量
		# number:个数

# ${var: -length}
	# 取字符串的最右侧的几个字符
	# 注意:冒号后必须有一个空白字符
示例:
[root@LEEMUMU ~]# tools="abcdefg"
[root@LEEMUMU ~]# echo ${tools:1:3}
bcd
[root@LEEMUMU ~]# echo ${tools: -3}
efg
[root@LEEMUMU ~]# echo ${tools:3:3}
def

2.基于模式提取字串

基于模式提取字串主要分为四种,如下:

  1. 其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。

    # ${var#*word}
    
  2. 其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。

    # ${var#*word}
    
  3. 其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符。

    # ${var%word*}
    
  4. 其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符。

    # ${var%%word*}
    

示例1:

[root@LEEMUMU ~]# mypath="/etc/init.d/functions"
[root@LEEMUMU ~]# echo ${mypath#*/}
etc/init.d/functions
[root@LEEMUMU ~]# echo ${mypath##*/}      # 适用于取基名
functions
[root@LEEMUMU ~]# echo ${mypath%/*}       # 适用于取路径名 
/etc/init.d
[root@LEEMUMU ~]# echo ${mypath%%/*}

[root@LEEMUMU ~]# 

示例2:

[root@LEEMUMU ~]# url="http://www.leemumu.com:80"
[root@LEEMUMU ~]# echo ${url##*:}            # 取端口号
80
[root@LEEMUMU ~]# echo ${url%%:*}            # 取协议
http

3.查找替换

注意:PATTERN中使用glob风格的通配符。关于glob风格的通配符可参考以下博客。https://blog.csdn.net/weixin_44983653/article/details/95232625#bash_411

  1. 查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    # ${var/PATTERN/SUBSTI}
    
  2. 查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部替换为SUBSTI所表示的字符串。

    # ${var//PATTERN/SUBSTI}
    
  3. 查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    # ${var/#PATTERN/SUBSTI}
    
  4. 查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    #${var/%PATTERN/SUBSTI}
    

示例:

[root@LEEMUMU ~]# love="wo ai tangtang,tangtang ai wo"
[root@LEEMUMU ~]# echo ${love/wo/pangpang}       # 第一次匹配到的替换
pangpang ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love//wo/pangpang}      # 所有匹配到的替换
pangpang ai tangtang,tangtang ai pangpang
[root@LEEMUMU ~]# echo ${love/#wo/pangpang}      # 行首匹配到的替换
pangpang ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%wo/pangpang}      # 行尾匹配到的替换
wo ai tangtang,tangtang ai pangpang

4.查找删除

注意:PATTERN中使用glob风格的通配符。关于glob风格的通配符可参考以下博客。https://blog.csdn.net/weixin_44983653/article/details/95232625#bash_411

  1. 查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,并将其删除。

    # ${var/PATTERN}
    
  2. 查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部删除。

    # ${var//PATTERN}
    
  3. 查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    # ${var/#PATTERN}
    
  4. 查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    #${var/%PATTERN}
    

示例:

[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/wo}                # 第一次匹配到的删除
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love//wo}               # 全部匹配到的删除
ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love/#wo}               # 行首匹配到的删除
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%wo}               # 行尾匹配到的删除
wo ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love/%[[:lower:]]}
wo ai tangtang,tangtang ai w
[root@LEEMUMU ~]# echo ${love/#[[:lower:]]}
o ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/#[a-Z][a-Z]}
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%[a-Z][a-Z]}
wo ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love//[a-Z][a-Z]}
,
[root@LEEMUMU ~]# echo ${love/[a-Z][a-Z]}
ai tangtang,tangtang ai wo

5.大小写替换

  1. 把var中的所有小写字符转换为大写。

    # ${var^^}
    
  2. 把var中的所有大写字符转换为小写。

    # ${var,,}
    

示例:

[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo $LOVE
WO AI TANGTANG,TANGTANG AI WO
[root@LEEMUMU ~]# echo ${love^^}
WO AI TANGTANG,TANGTANG AI WO
[root@LEEMUMU ~]# echo ${LOVE,,}
wo ai tangtang,tangtang ai wo

6.变量赋值

注意:变量赋值过程中如果VALVE有空格的话,需要使用 “” 进行区分。

  1. 如果var变量为空,或未设置,那么返回VALUE;否则,则返回var变量的值。

    # ${var:-VALUE}
    
  2. 如果var变量为空,或未设置,那么返回VALUE,并将VALUE赋值给var变量;否则,则返回var变量的值。

    # ${var:=VALUE}
    
  3. 如果var变量不空,则返回VALUE。否则,返回空值。

    # ${var:+VALUE}
    
  4. 如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值。

    # ${var:?ERROR_INFO}
    

示例:

[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love:-"The value is empty."}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love1:-"The value is empty."}
The value is empty.
[root@LEEMUMU ~]# echo ${love:="The value is empty."}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love1:="The value is empty."}
The value is empty.
[root@LEEMUMU ~]# echo $love1
The value is empty.
[root@LEEMUMU ~]# echo ${love:+"The value is empty"}
The value is empty
[root@LEEMUMU ~]# echo ${love2:+"The value is empty"}

[root@LEEMUMU ~]# echo ${love:?"The value is empty"}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love3:?"The value is empty"}
-bash: love3: The value is empty
2014-01-22 18:18:38 peterbig 阅读数 4015
  • PHP7字符串模块

    King老师精心打造的PHP7字符串实战课程,由浅入深的讲解了PHP中字符串模块,并介绍了一些常用的字符串相关操作,让我们一起开启字符串之旅吧~ 山哥出品,必属精品!

    15547 人正在学习 去看看 何山

最近在从ip 数据包中获取源IP时,由于源IP是一个unsigned int32位整数,而且内核中无法调用inet_aton函数,所以需要自己编程,将ip字符串转换成32位的整数。

 

初步想想,写出一个原型:

unsigned int ip_str_to_num(const char *buf)

{

    unsigned int tmpip[4] = {0};

    unsigned int tmpip32 = 0;

    unsigned char *uip = (unsigned char*)&tmpip32;

 

    sscanf(buf, "%d.%d.%d.%d", &uip[0], &uip[1], &uip[2], &uip[3]);

    return tmpip32;

}


 

上面的代码在用户态编译运行完全正确,但是在内核态编译时,遇到一个报警,sscanf对应%d要求输入一个(int *)的参数,但是却得到一个(unsigned char*)的参数,所以编译器警告。将代码经过改进如下:

unsigned int ip_str_to_num(const char *buf)

{

    unsigned int tmpip[4] = {0};

    unsigned int tmpip32 = 0;

 

    sscanf(buf, "%d.%d.%d.%d", &tmpip[0], &tmpip[1], &tmpip[2], &tmpip[3]);

    tmpip32 = (tmpip[3]<<24) | (tmpip[2]<<16) | (tmpip[1]<<8) | tmpip[0];

    return tmpip32;

}


 

改进过的代码效率要低些,但是消除了告警。

 

反之,将整数转换为字符串,则要简单许多,代码如下:

 

#define IP_LEN 17

static inline void ip_num_to_str(unsigned int ip_num, char *ip_str)

{

        unsigned char * uip = (unsigned char *)&ip_num;

        snprintf(ip_str, IP_LEN , "%d.%d.%d.%d", uip[0], uip[1], uip[2], uip[3]);

}

2013-05-31 16:40:01 liliyaya 阅读数 549
  • PHP7字符串模块

    King老师精心打造的PHP7字符串实战课程,由浅入深的讲解了PHP中字符串模块,并介绍了一些常用的字符串相关操作,让我们一起开启字符串之旅吧~ 山哥出品,必属精品!

    15547 人正在学习 去看看 何山

Linux中用到较多得字符串转换函数主要有:simple_strtoul之类

这些字符串转换函数保存在 库文件 lib/vsprintf.c


unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 

unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) 

long simple_strtol(const char *cp, char **endp, unsigned int base) 

long long simple_strtoll(const char *cp, char **endp, unsigned int base) 

int strict_strtoul(const char *cp, unsigned int base, unsigned long *res) 

int strict_strtol(const char *cp, unsigned int base, long *res) 

int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res) 

int strict_strtoll(const char *cp, unsigned int base, long long *res) 

int sprintf(char *buf, const char *fmt, ...) 

int snprintf(char *buf, size_t size, const char *fmt, ...) 

int sscanf(const char *buf, const char *fmt, ...) 


unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成unsigend long long型数据。
返回:返回转换后数据。
参数:cp指向字符串的开始,endp指向分析的字符串末尾的位置,base为要用的基数(进制数),base为0表示通过cp来自动判断基数,函数自动可识别的基数:‘0x’表示16进制,‘0’表示8进制,其它都认定为10进制。函数可转换成数字的有效字符为:[0,f]。举例:cp = “0x12str”,base = 0,则返回unsigned long long为18,*endp = “str”。 参数下同。

unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成unsigend long型数据。
返回:返回转换后数据。

long simple_strtol(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成sigend long型数据。
返回:返回转换后数据。
说明:该函数调用simple_strtoul,但它先会判断cp指向的字符串的第一个字符是否为负号‘-’。如果为‘-’,它返回负的simple_strtoul的结果。

long long simple_strtoll(const char *cp, char **endp, unsigned int base)
功能:将一个字符串转换成sigend long long型。
返回:返回转换后数据。

int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
功能:将一个字符串转换成unsigend long型。
返回:转换成功返回0,否则返回负。res指向转换后的unsigned long数据。
说明:该函数对cp指向的字符串严格要求,cp指向的字符串必须为真正的unsigned long形式的字符串。字符串必须以“0x”、“0”、[0,f]开始,中间全部为有效的字符[0,f],否则返回为负。它会处理字符串最后的“\n”字符。下同。

int strict_strtol(const char *cp, unsigned int base, long *res)
功能:将一个字符串转换sigend long型。
返回:转换成功返回0,否则返回负。res指向转换后的signed long数据。

int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)
功能:将一个字符串转换unsigend long long型。
返回:转换成功返回0,否则返回负。res指向转换后的unsigned long long数据。

int strict_strtoll(const char *cp, unsigned int base, long long *res)
功能:将一个字符串转换sigend long long型。
返回:转换成功返回0,否则返回负。res指向转换后的signed long long数据。

int sprintf(char *buf, const char *fmt, ...)
功能:格式化输出字符串,类似于printf,只是用字符串buf作为输出对象。
返回:返回写入buf字符串的字符个数。

int snprintf(char *buf, size_t size, const char *fmt, ...)
功能:格式化输出字符串,类似于printf,只是用字符串buf作为输出对象。其中size为buf的大小(包括‘\0’字符)。
返回:返回写入buf字符串的字符个数。

int sscanf(const char *buf, const char *fmt, ...)
功能:格式化输入字符串,类似于scanf,只是用字符串buf作为输入对象。
返回:返回读取buf字符串的字符个数。


仅记录下来 防止自己忘记

没有更多推荐了,返回首页