字符串处理函数
主要介绍strlen(), strcat(), strncat(), strcmp(), strncmp(), strcpy(), strncpy()以及sprintf()。
strlen()
原型:size_t strlen(const char *__s); 获取字符串长度。参数为字符串地址,返回值为字符串长度(不包括'\0')。
示例:
#include <stdio.h>
#include <string.h>
int main () {
char str[50];
int len;
strcpy(str, "This is tutorialspoint.com");
len = strlen(str);
printf("Length of |%s| is |%d|\n", str, len);
return(0);
}
输出:Length of |This is tutorialspoint.com| is |26|
strcat()
原型:char *strcat(char *dest, const char *src)。将src指向的字符串追加到dest指向的字符串的末尾。参数为目标字符串和原字符串。返回指向dest的地址。
⚠️:该函数不会检查src是否可以追加到dest上,即若dest分配的空间不够大,则会造成缓冲区溢出。
示例:
#include <stdio.h>
#include <string.h>
int main () {
char src[50], dest[50];
strcpy(src, "This is source");
strcpy(dest, "This is destination");
strcat(dest, src);
printf("Final destination string : |%s|", dest);
return(0);
}
输出:Final destination string : |This is destinationThis is source|
strncat()
原型:char *strncat(char *dest, const char *src, size_t n)。将src指向的字符串追加到dest所指向的字符串的末尾,最多n个字符。参数为目标字符串和原始字符串,追加的最大长度。返回指向dest的地址。
示例:
#include <stdio.h>
#include <string.h>
int main () {
char src[50], dest[50];
strcpy(src, "This is source");
strcpy(dest, "This is destination");
strncat(dest, src, 15);
printf("Final destination string : |%s|", dest);
return(0);
}
输出:Final destination string : |This is destinationThis is source|
strcmp()
原型:int strcmp(const char *str1, const char *str2)。将str1指向的字符串与str2指向的字符串进行比较。参数为目标字符串和原始字符串。如果第一个字符串按字母顺序排在第二个字符串之前,strcmp()将返回一个负数,若相等,则返回0,否则,返回一个正数。
示例:
#include <stdio.h>
#include <string.h>
int main () {
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strncmp(str1, str2, 4);
if(ret < 0)
printf("str1 is less than str2");
else if(ret > 0)
printf("str2 is less than str1");
else
printf("str1 is equal to str2");
return(0);
}
输出:str2 is less than str1
strncmp()
原型:int strncmp(const char *str1, const char *str2, size_t n)。和strcmp()相比,最多比较str1和str2的前n个字符。参数为目标字符串和原始字符串,以及最大比较字符数。如果第一个字符串按字母顺序排在第二个字符串之前,strcmp()将返回一个负数,若相等,则返回0,否则,返回一个正数。
示例:
#include <stdio.h>
#include <string.h>
int main () {
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strncmp(str1, str2, 4);
if(ret < 0)
printf("str1 is less than str2");
else if(ret > 0)
printf("str2 is less than str1");
else
printf("str1 is equal to str2");
return(0);
}
输出:str2 is less than str1
strcpy()
原型:char *strcpy(char *dest, const char *src)。将src指向的字符串复制到dest。参数为目标字符串和原始字符串。返回指向dest的地址。
简单的指针赋值操作,如:pts2 = pts1; 仅仅赋值字符串的地址,而不是字符串本身。strcpy可以赋值字符串本身。
示例:
int main () {
char src[40];
char dest[100];
memset(dest, '\0', sizeof(dest));
strcpy(src, "This is tutorialspoint.com");
strcpy(dest, src);
printf("Final copied string : %s\n", dest);
return(0);
}
输出:
Final copied string : This is tutorialspoint.com
strncpy()
原型:char *strncpy(char *dest, const char *src, size_t n)。从指向的字符串中复制最多n个字符,由src复制到dest。 在src的长度小于n的长度的情况下,dest的剩余部分将用空字节填充。参数为目标字符串和原始字符串,以及最大复制字符数。返回指向dest的地址。
示例:
#include <stdio.h>
#include <string.h>
int main () {
char src[40];
char dest[12];
memset(dest, '\0', sizeof(dest));
strcpy(src, "This is tutorialspoint.com");
strncpy(dest, src, 10);
printf("Final copied string : %s\n", dest);
return(0);
}
输出:Final copied string : This is tu
sprintf()
sprintf()函数声明在stdio.h头文件,而不是string.h中。和printf()功能类似,但其写入且格式化字符串,而不是输出到屏幕。
原型:int sprintf(char *str, const char *format, ...)。将格式化的输出发送到str指向的字符串。如果成功,则返回写入的字符总数,不包括附加在字符串末尾的空字符,否则在发生故障时返回负数。
示例:
#include <stdio.h>
#include <math.h>
int main () {
char str[80];
sprintf(str, "Value of Pi = %f", M_PI);
puts(str);
return(0);
}
输出:Value of Pi = 3.141593
字符串转数字函数
atoi():字符串转int;atof():字符串转float;atol():字符串转long。
还有诸如:strtol(),strtoul(),strtod()等函数,这些函数还提供转化的数字基数(2, 8, 10, 16)等。