首页 > 其他分享 >字符函数和字符串函数

字符函数和字符串函数

时间:2024-10-14 11:17:25浏览次数:3  
标签:字符 函数 int char str 字符串 strlen

       

         在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了 ⼀系列库函数,接下来我们就学习⼀下这些函数。

        1. 字符分类函数

        C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。 这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h

        这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其他的⾮常类似:

int islower ( int c );

        islower 是能够判断参数部分的 c 是否是⼩写字⺟的。 通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回 0

练习:

写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。

#include <stdio.h>

#include <ctype.h>

int main ()
{
     int i = 0;
     char str[] = "Test String.\n";
     char c;
     while (str[i])
     {
         c = str[i];
     if (islower(c)) 
         c -= 32;
         putchar(c);
         i++;
     }
 return 0;
}

2. 字符转换函数

        C语⾔提供了2个字符转换函数:

int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写

int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写

        上⾯的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolower 函数。

#include <stdio.h>

#include <ctype.h>

int main ()
{
     int i = 0;
     char str[] = "Test String.\n";
     char c;
     while (str[i])
     {
         c = str[i];
     if (islower(c)) 
         c = toupper(c);
     putchar(c);
     i++;
     }
 return 0;
}

3. strlen的使⽤和模拟实现

        size_t strlen ( const char * str );

• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。

• 参数指向的字符串必须要以 '\0' 结束。

• 注意函数的返回值为size_t,是⽆符号的( 易错 )

strlen的使⽤需要包含头⽂件#include<string.h>

• 学会strlen函数的模拟实现

#include <stdio.h>

#include <string.h>

int main()
{
     const char* str1 = "abcdef";
     const char* str2 = "bbb";
     if(strlen(str2)-strlen(str1)>0)
     {
         printf("str2>str1\n");
     } 
     else
     {
         printf("srt1>str2\n");
     }
 return 0;
}

   strlen的模拟实现:

        ⽅式1:

//计数器⽅式 

int my_strlen(const char * str)
{
     int count = 0;
     assert(str);
     while(*str)
     {
         count++;
         str++;
     }
 return count;
}

⽅式2:

//不能创建临时变量计数器 

int my_strlen(const char * str)
{
     assert(str);
     if(*str == '\0')
     return 0;
     else

     return 1+my_strlen(str+1);
}

⽅式3:

//指针-指针的⽅式 

int my_strlen(char *s)
{
     assert(str);
     char *p = s;
     while(*p != ‘\0’ )
         p++;
     return p-s;
}

4. strcpy的使⽤和模拟实现

char* strcpy(char * destination, const char * source );

Copies the C string pointed by source into the array pointed by destination, including  the  terminating null character (and stopping at that point).

• 源字符串必须以 '\0' 结束。

• 会将源字符串中的 '\0' 拷⻉到⽬标空间。

• ⽬标空间必须⾜够⼤,以确保能存放源字符串。

• ⽬标空间必须可修改。

• 学会模拟实现。

strcpy的模拟实现:

//1.参数顺序 

//2.函数的功能,停⽌条件 

//3.assert
//4.const修饰指针 

//5.函数返回值 

//6.题⽬出⾃《⾼质量C/C++编程》书籍最后的试题部分 

char* my_strcpy(char *dest, const char*src)
{ 
     char *ret = dest;
     assert(dest != NULL);
     assert(src != NULL);
 
     while((*dest++ = *src++))
     {
     ;
     }
 return ret;
}

5. strcat 的使⽤和模拟实现

• Appends a copy of the source string to the destination string. The terminating null character  in destination is overwritten by the first character of source, and a null-character is included  at the end of the new string formed by the concatenation of both in destination. 

• 源字符串必须以 '\0' 结束。

• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。

• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。

• ⽬标空间必须可修改。

• 字符串⾃⼰给⾃⼰追加,如何?

模拟实现strcat函数:

char *my_strcat(char *dest, const char*src)
{
     char *ret = dest;
     assert(dest != NULL);
     assert(src != NULL);
 while(*dest)
 {
     dest++;
 }
     while((*dest++ = *src++))
     {
     ;
     }
 return ret;
}

6. strcmp的使⽤和模拟实现

标签:字符,函数,int,char,str,字符串,strlen
From: https://blog.csdn.net/do_yo/article/details/142913252

相关文章

  • CSS 中的数学函数
    min()/max()/clamp()和calc()函数类似,任何可以使用<length>,<frequency>,<angle>,<time>,<percentage>,<number>,<integer>数据类型的地方都可以使用min()/max()/clamp()这3个数学函数。min()/max()/clamp()这3个数学函数和calc()函数是可以相互嵌套使用的,例如:width:calc(min(80......
  • [JLOI2015] 有意义的字符串 题解
    看到这个\(7\times10^{18}\)的模数已经可以摆烂了。不是,你告诉我这东西跟矩阵快速幂优化DP有关系??观察到这个题显然不能硬做,因为你显然不能直接算小数部分,而且还有个取模很难受。所以我们希望把一切的计算都基于整数。这个时候我们就要思考,有什么东西可以把根号转化为整数......
  • PTA C语言 7-1 字符串比对 单位 郑州轻工业大学输入两个长度相同的字符串,字符串长度小
    7-1字符串比对分数10作者 zzuli单位 郑州轻工业大学输入两个长度相同的字符串,字符串长度小于20,且只包含英文字符。将两个字符串逐字符对比的结果输出(由+和-构成的一行字符),具体规则如下:如果两个字符串对应字符是同一字母则输出+如果两个字符串对应字符不是同一字母......
  • C语言中以下概念,以及这些概念之间的关系: 1.代码段 2.数据段 3.堆栈 4.全局变量 5.局部
    在C语言程序中,内存布局通常被分为几个主要的区域,每个区域都有不同的用途。以下是关于代码段、数据段、堆栈、全局变量、局部变量和函数的详细描述,以及它们之间的关系。1.代码段(TextSegment)代码段(也称为textsegment)是程序的只读部分,存储的是程序的指令(即代码)。这是可执行文......
  • 如何使用SQL函数处理和清理输入数据中的NULL值?
    处理和清理输入数据中的NULL值是一个重要的主题。NULL值代表未知或缺失的数据,这可能会影响数据分析的准确性。因此,在进行任何分析之前,正确地处理这些NULL值是至关重要的。以下是一些常用的方法来处理和清理输入数据中的NULL值,并附带了详细的例子。1.使用COALESCE函数COAL......
  • 对数函数log
    对数函数\(\log\)前言表扬一下福州屏东中学,新初一课本里是乘方,作业考的是\(\log\)的公式。(要不是作业我都快忘记\(\log\)了)定义若\(a^b=n\),则\(\log_an=b\)​。即“底不变,俩交换”。例如\(\because2^3=8,\therefore\log_28=3\)​。在这里的\(n\)称为真数。......
  • StringUtils Java字符串工具类
    在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、拼接字符串、使用正则表达式等等。如果只用String类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。现在有个好消息是:org.apache.commons.lang3包下的StringUtils工......
  • 面对配分函数 - 引言篇
    序言深度学习,作为人工智能领域的一个核心分支,近年来在图像识别、语音识别、自然语言处理等多个方面取得了显著进展。其核心思想是通过构建深层的神经网络模型,模拟人脑的学习机制,从而实现对复杂数据的自动特征提取和高效处理。然而,在深度学习的研究与实践中,配分函数(......
  • 函数递归之青蛙跳台阶问题
    一、题目:一个青蛙一次只能向上跳一级或者跳两级台阶问:这个青蛙跳上n级台阶有多少种跳法二、解题:分析:我们将跳法的个数叫做F(n),不妨从n比较下的时候寻找一下规律nF(n)1122334558613721往下列举不难发现每一项都是其前面两项的和,所以这个问题就可以看作从第二项开始的......
  • 如何学习VBA_3.2.12:工作表函数也是可以利用的
    我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是......