字符串处理函数

主要介绍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)等。

posted @ 2019-01-05 23:15  Jeffrey_Yang  阅读(162)  评论(0编辑  收藏  举报