C语言字符串

时间:2022-03-19 00:23:48

1字符处理库函数

头文件

#include <ctype.h>

函数

功能

int isalnum(int c)

判断字符常量是否为字母或数字,如isalnum(‘a’)isalnum(‘1’)

isdigit

是否为数字

isalpha

是否为字母

islower

是否小写

isupper

是否大写

tolower

将大写字母转为小写字母

toupper

将小写字母转为大写字母

字符常量与整型常量的区别:

‘1’表示字符常量,而1表示整型常量,1 = ‘1’– ‘0’ /*将字符’1’转为整型1*/

char c = ‘1’; /*将字符’1’赋值给字符变量c*/

char c = 1;  /*ASCII码值为1的字符赋值给字符变量c*/

int c = ‘1’;  /*将字符’1’ASCII码值赋值给整型变量c*/

int c = 1;   /*将整型1的值赋值给整型变量c*/

int myisalnum(int c)
{
    return (((c >= '0') && (c <= '9')) || ((c >= 'a') && (c <= 'z')) || ((c >='A') && (c <= 'Z')));
}

2字符串转换函数

头文件

#include <stdlib.h>

函数

功能

int atoi(const char *nptr);

将字符串转换成整型数

long atol(const char *nptr);

将字符串转换成长整型数

double atof(const char *nptr);

将字符串转换成浮点数

int my_atoi(const char *nptr)
{
    int num = 0;
    int is_neg = 0;
    /*输入错误处理*/
    if (nptr == NULL)
    {
        return -1;
    }
    
    while (*nptr != '\0')
    {
        /*字符串前面的空字符的处理*/
        if (isspace(*nptr) && num == 0)
        {
            ;/*do nothing*/
        }
        /*字符串前面负号的处理*/
        else if (*nptr == '-' && num == 0)
        {
            is_neg = 1;
        }
        /*字符串前面正号的处理*/
        else if (*nptr == '+' && num == 0)
        {
            is_neg = 0;
        }
        /*数值计算*/
        else if (*nptr >= '0' && *nptr <= '9')
        {
            num = num * 10 + *nptr - '0';
        }
        /*字符串中含有其他字符的一律返错*/
        else
        {
            return -1;
        }

        ++nptr;
    }

    if (is_neg)
    {
        return (0 - num);
    }
    else 
    {
        return num;
    }
}

3字符串处理函数

头文件

#include <string.h>

函数

功能

char *strcpy(char *s1, const char *s2);

将字符串s2复制到s1中。

char *strncpy(char *s1, const char *s2, size_t n);

将字符串s2复制至少n个字节到s1中。

char *strcat(char *s1, const char *s2);

s2添加到s1的尾部。

char *strncat(char *s1, const char *s2, size_t n);

s2添加至少n个字节到s1的尾部。

int strcmp(const char *s1, const char *s2);

比较字符串s1s2的大小

int strncmp(const char *s1, const char *s2, size_t n)

s1s2中最多n个字符进行比较

char *strchr(const char *s, int c);

字符在s中第一次出现的位置

char *strstr(const char *s1, const char *s2);

s2s1中第一次出现的位置

size_t strlen(const char *s);

计算s的长度(不包括终止的空字符)

char *strcpy (char *dst, char *src)
{
  char *cp = dst;

  while (*cp++ = *src++)
      ; /* Copy src over dst */

  return dst;
}

char *strcat(char *dst, char *src)
{
  char *cp = dst;

  while (*cp)
      ++cp; /* Find end of dst */

  while( *cp++ = *src++ )
      ; /* Copy src to end of dst */

  return dst;
}

int strlen(const char *str)
{
  int length = 0;

  while(*str++)
      ++length;

  return length;
}

int strcmp(unsigned char *src, unsigned char *dst)
{
  int ret = 0 ;

  for(; *src == *dst; ++src, ++dst)
      if (*s1 == '\0') 
           return 0;

  return (*(unsigned char *)src < *(unsigned char *)dst) ? -1 : 1;
}