str函数详解

常用str函数详细介绍
#include<iostream>
using namespace std;
int main()
{
*
拷贝一个字符串到另一个
char *strcpy (char *destin, char *source);
*/
char string[10];
char *str1 = "abcdefghi";
strcpy(string,str1);
printf("%s\n",string);
结果:
【总结】常用str函数详细介绍
*
字符串拼接
char *strcat(char *destin, char *source);
*/
char destination[25];
memset(destination,0,25); //将数组内容清0
char *blank = " ", *c = "C++", *Borland = "Borland";
strcat(destination, Borland);
strcat(destination, blank);
strcat(destination, c);
printf("%s\n",destination);
结果:
【总结】常用str函数详细介绍
*
在一个串中查找给定字符的第一个匹配之处(即下标值)
char *strchr (char *str, char c);
*/
char string[15];
char *ptr, c = 'r';
strcpy(string, "This is a string");
ptr = strchr(string, c);
if(ptr)
printf("The character %c is at position: %d\n", c, ptr-string);
//ptr-string 将ptr转化为string类型
else
printf("The character is not found!");
结果:
【总结】常用str函数详细介绍
*
串比较
int strcmp (char *str1, char *str2);
看Asic码,str1>str2,返回值>0;两串相等,返回0,str1<str2,返回值<0.
*/

char *str1 = "aaa", *str2 = "bbb", *str3 = "ccc";
int ptr;
ptr = strcmp(str1, str2);
if(ptr>0)
printf("str1 is greater than str2 \n");
else
printf("str1 is lesser than str2 \n");
ptr = strcmp(str2, str3);
if(ptr>0)
printf("str2 is greater than str3 \n");
else
printf("str2 is lesser than str3 \n");
结果:
【总结】常用str函数详细介绍
*
int stricmp(char *str1, char *str2); (或者strcmpi)
将两个字符串比较,不管大小写
当str1<str2时,返回值<0
当str1=str2时,返回值=0
当str1>str2时,返回值>0
*/
char *str1 = "BBB", *str2 = "bbb";
int ptr;
ptr = stricmp(str1, str2);
if(ptr > 0)
printf("str1 is greater than str2 \n");
else if(ptr == 0)
printf("str1 equals str2 \n");
else if(ptr < 0)
printf("str1 is lesser than str2 \n");

*☆☆☆
返回一个长度,这个长度是在string1中没有出现string2任意字符的从string1头计算的字符串的长度。
int strcspn(char *str1, char *str2);
*/
char *string1 = "1234567890";
char *string2 = "647DC8";
int length=-1;
length = strcspn(string1, string2);
printf("Character where strings intersect is at postion %d \n",length);
//第一个相同的字符是4,string1中前面有3个,返回3
结果:
【总结】常用str函数详细介绍
*
将串拷贝到新建的位置
char *strdup(char *str);
*/
char *dup_str, *string = "abcde";
dup_str = strdup(string);
printf("%s\n",dup_str);
free(dup_str);
*
返回指向错误信息的字符串的指针
char *strerror(int errnum);
*/
char *buffer;
buffer = strerror(errno);
printf("Error: %s\n",buffer);
*
将一个串中指定个数的字符替换成指定字符
char *strnset(char *str, char ch, unsigned n);
*/
char string[55] = "abcdefghijklmnopqrstuvwxyz";
//不能使用*string,因*string初始化后是个常量,不能改变其内容,
//也可不指定数组的大小,即使用string[]
char letter = 'x';
printf("string before strnset: %s\n", string);
strnset(string, letter, 20);
printf("string after strnset:%s\n", string);
结果:
【总结】常用str函数详细介绍
*
在串中查找给定字符集中的字符,返回位置指针
char *strpbrk(char *str1, char *str2);
*/
char *string1 = "abcdefghijklmnopqrstuvwxyz";
char *string2 = "onm";
char *ptr;
ptr = strpbrk(string1, string2);
if(ptr)
printf("strpbrk found first character: %c\n", *ptr);//返回m的指针位置.*ptr为m
else
printf("strpbrk didn't find character in set \n");
结果:
【总结】常用str函数详细介绍
*
在串中查找指定字符的最后一次出现的位置
char *strrchr(char *str, char c);
*/
char string[30];
char *ptr, c = 'r';
strcpy(string, "This is a string!");
ptr = strrchr(string, c);
if(ptr)
printf("The character %c is at position:%d\n", c, ptr-string);
else
printf("The character is not found!");
结果:
【总结】常用str函数详细介绍
*
串倒转
char *strrev(char *str);
*/
char string[20] = "string";
//不能使用*string,因为*string初始化后是个常量,不能改变其内容.还可以string[]
printf("Before strrev(): %s\n", string);
strrev(string);
printf("After strrev(): %s\n", string);
结果:
【总结】常用str函数详细介绍
*
将一个串所有字符替换为指定字符
char *strset(char *str, char c);
*/
char string[10] = "123456789";
char c = 'c';
printf("Before strset():%s\n", string);
strset(string, c);
printf("After strset():%s\n", string);
结果:
【总结】常用str函数详细介绍
*☆☆☆
在串中查找指定字符集的子集第一次与串不匹配的位置(下标)
int strspn(char *str1, char *str2);
*/
char *string1 = "1234567890";
char *string2 = "123568";
int length;
length = strspn (string1, string2);
printf("Character where strings differ is at position %d\n", length);
//123匹配,之后不匹配,返回下标3
结果:
【总结】常用str函数详细介绍
*
在串中查找指定字符串第一次出现的位置(返回该位置的指针)
char *strstr[X6] (char *str1, *str2);
*/
char *str1 = "Broland International", *str2 = "national", *ptr;
ptr = strstr(str1, str2);
printf("The substring is:%s\n", ptr);
结果:
【总结】常用str函数详细介绍
*
将字符串转化为double类型的值
double *strtod[X7] (char *str, **endptr);
*/
char input[80], *endptr;
double value;
printf("Enter a floating point nunber:");
gets(input);
value = strtod(input, &endptr);
printf("The string is %s the number is %lf\n", input, value);
*
分解字符串为一组字符串
char *strtok(char *str1, char *str2);
str1为待分解的字符串,str2为分隔符字符串
*/
char sentence[]="This is a sentence with 7 tokens";
//cout<<"The string to be tokenized is:\n"<<sentence<<"\n\nThe tokens are:\n\n";
printf("The string to be tokenized is:\n%s\n\nThe tokens are:\n\n", sentence);
char *tokenPtr=strtok(sentence,"e");
while(tokenPtr!=NULL)
{
//cout<<tokenPtr<<'\n';
printf("%s\n", tokenPtr);
tokenPtr=strtok(NULL,"e");
}
//cout<<"After strtok, sentence = "<<sentence<<endl;
printf("After strtok, sentence = %s\n", sentence);
结果:
【总结】常用str函数详细介绍
*
将串转换为长整数
long strtol(char *str, char **endptr, int base);
str待转换的字符串;endptr传出参数接受返回值;base范围从至,或.参数base代表采的进制方式.
将各种进制的数转化为十进制长整形
*/
char *string = "1111", *endptr;
long lnumber;
lnumber = strtol(string, &endptr,2);
printf("string = %s long = %ld\n", string, lnumber);
*
将小写字母转化为大写形式,返回指向str的指针
char *strupr(char *str);
*/
char string[] = "sdgsdfsgdsag";
printf("%s\n", strupr(string));
*
交换相邻两个字节
void swab(char *from, char *to, int nbytes);
*/
char source[15] = "Frank Borland";
char target[15]=" ";
printf("Before swab : %s\n", source);
swab(source, target, strlen(source));
printf("This is target : %s\n", target);
return 0;
}
许永伟
[X1] 连同字符串结束标志ch\0一起拷贝。strlen函数的意思是测试字符串的字符长度,不含字符串结束标志的。
sizeof是个运算符,它的结果是字符串在内存中的所占字节大小,它要把\0算进去的。
[X2] strcat(str1,str2)会先去掉str1的结束符后再把str2接连到str1末尾。Str1的空间必须至少是strlen(str1)+ strlen(s2)+1的值.否则内存溢出
[X3] 查找字符串str中首次出现字符c的位置
[X4] 比较两个字符串大小。按Asic比较,区分大小写。
[X5] 比较两个字符串,不区分大小写。
[X6] 可用于判断是否包含某子串。
[X7]
VC:atof、atoi、atol、gcvt、strtod、strtol、strtoul的详细介绍
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)结果相同。
范例

#include
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);结果相同。
范例

#include
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);结果相同。
范例

#include
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
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()。
 
===============================================
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指定的转换字符串超出合法范围。
范例

#include
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
定义函数
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指定的转换字符串超出合法范围。

你可能感兴趣的:(str)