学习笔记---字符串提高-库函数的应用与改动

41 篇文章 0 订阅
10 篇文章 0 订阅

字符串处理


库函数


字符函数库

include <ctype.h>


常用字符处理函数
函数原型功能返回值
int isalnum(int ch);判断ch是否是数字或字母字符返回非零值,否则返回0
int isalpha(int ch);判断ch是否是字母如果ch是字母,返回非零值,否则返回0
int iscntrl(int ch);判断ch是否是控制字符如果ch是控制字符,返回非零值,否则返回0
int isdigit(int ch);判断ch是否是数字(0~9)如果ch是数字,返回非零值,否则返回0
int islower(int ch);判断ch是否是小写字母如果ch是小写字母,返回非零值,否则返回0
int isupper(int ch);判断ch是否是大写字母如果ch是大写字母,返回非零值,否则返回0
int isxdigit(int ch);判断ch是否是十六制数字字符如果ch是十六制数字字符,返回非零值,否则返回0
int tolower(int ch);将大写字母转换成小写字母如果ch是大写字母,返回对应小写字母,否则返回ch
int toupper(int ch);将小写字母转换成大写字母如果ch是小写字母,返回对应大写字母,否则返回ch

注:此处只提供部分函数,需要更多资料需查阅相关文档

应用举例


代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*这个程序用来统计输入字符串中数字字符的个数*/
int main()
{
    char str[50];
    int i=0,n=0;
    printf("输入字符串:");
    gets(str);
    while(str[i]!='\0')
        if(isdigit(str[i++]))n++;
    printf("其中数字字符的个数是:%d\n",n);
    return 0;
}
结果:


解析:

使用了C语言自带的库函数isdigit来实现判断数字字符的目的


串处理函数

include <string.h>


常用串处理函数
函数原型功能返回值
char *strcat(char *str1,const char *str2);将str2连接到str1后面返回str1
char *strchr(const char *str,int ch);查找字符ch在str中第一次出现的位置查找成功,返回指向字符ch在str中第一次出现的位置指针,否则返回null
int strcmp(const char *str1,const char *str2);按字典方式比较字符串str1与字符串str2如果str1小于str2,返回一个负数;如果str1等于str2,返回一个0;否则返回一个正数
char *strcpy(char *str1,const char *str2);复制字符串str2到字符串str1中返回str1
size_t strlen(const char *str);求字符串str的长度返回字符串str的长度
注:const表示相应的参数在函数中不能被修改;size_t是C语言中定义的一种专门用于表示字符串长度的数据类型,可以当成int来看待


应用举例


代码示例1:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*这个程序用来测试串处理函数strcat*/
int main()
{
    char str1[50]="GOOD ",str2[5]="good ";
    strcat(str1,"morning");
    printf("%s",str1);
    strcat(str2,"morning");
    printf("\n%s",str2);
    return 0;
}
结果:


解析:

1.如上所示,第一次调用strcat十分成功。将GOOD 和morning连接了起来。

2.str2的字符数组长度只有5,小于good morning需求的长度。所以调用strcat之后输出了奇怪的东西,这也算是一种数组越界


代码示例2:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*这个程序用来测试串处理函数strcmp*/
int main()
{
    printf("%d\n",strcmp("abcdef","abdeff"));
    printf("%d\n",strcmp("abcdef","abCdef"));
    printf("%d\n",strcmp("abc","abcdef"));
    printf("%d\n",strcmp("abc","abc"));
    return 0;
}
结果:


解析:

1.strcmp函数的比较实质是比较ASCII码值,将两个字符串从左到右逐个比较,直到出现不同的字符或遇到'\0'

2.两个字符串第一个不相同的字符的ASCII码值的大小将决定结果;只有全部字符相同,才认为相等。


代码示例3:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*这个程序用来测试串处理函数strlen*/
int main()
{
    char str1[50]="good morning!";
    printf("%d",strlen(str1));
    return 0;
}
结果:


解析:

如上,strlen输出的不是字符数组的长度,而是不包含\0的字符串的长度


编写自己的字符处理函数



代码示例1:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*这个程序用于测试字符串的复制*/
char *scopy1(char*,const char*);
char *scopy2(char*,const char*);
int main()
{
    char str2[20]="type1",str1[20];
    printf("使用库函数:%s\n",strcpy(str1,str2));
    printf("使用下标法:%s\n",scopy1(str1,str2));
    printf("使用指针法:%s\n",scopy2(str1,str2));
    return 0;
}
char *scopy1(char *str1,const char *str2)
{
    int i=0,j=0;
    while(str1[i++]=str2[j++]);
    return str1;
}
char *scopy2(char *str1,const char *str2)
{
    char *p1=str1,*p2=str2;
    while(*p1++=*p2++);
    return str1;
}
结果:


解析:

1.如上,使用库函数strcpy可以实现字符串的复制

2.理解字符串的原理,可以自己写出相同效果的代码。如上的scopy1scopy2

3.自己写的代码可以做更多的变通,使用更加灵活。应该掌握这种能力。

4.应该认识到,字符串即数组,所以str1=str2这种形式是不可行的


代码示例2:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*这个程序用来实现不区分大小写的比较字符串*/
int scomp(const char*,const char*);
int main()
{
    printf("%d\n",scomp("PFXa","pfXA"));
    printf("%d\n",scomp("PF12","pF34"));
    printf("%d\n",scomp("Bxb3","bdeF"));
    return 0;
}
int scomp(const char *str1,const char *str2)
{
    const char *p=str1,*q=str2;
    while(tolower(*p)==tolower(*q)&&*p!='\0'&&*q!='\0')
    {
        p++;
        q++;
    }
    /*当循环结束,即str1和str2完全相等,或*p和*q不相等*/
    if(tolower(*p)>tolower(*q))
        return 1;
    else if(tolower(*p)<tolower(*q))
        return -1;
    else
        return 0;
}
结果:


解析:

1.如上,通过自己编写函数,能够灵魂的实现需要的功能

2.使用tolower函数将所有字母都转成小写再进行比较能够实现不区分大小写。


代码示例3:

#include <stdio.h>
#include <stdlib.h>
/*
统计单词个数

输入一个英文句子,每个单词用个数不等的空格隔开,要求统计其中的单词的个数
*/
int wordnum(const char*);
int main()
{
    char s[81];
    gets(s);
    printf("\"%s\"have%dwords.\n",s,wordnum(s));
    return 0;
}
int wordnum(const char *str)
{
    int i,num=0,word=0;
    for(i=0;*(str+i)!='\0';i++)//此处虽然变量名是str,但实际上是通过指针法访问字符串各元素的
    {
        if(*(str+i)==' ')//每次读到空格就使word为0
            word=0;
        else if(word==0)//当没读到空格,而word又为0时,说明此时读到了单词的首字母
        {
            word=1;//将word置为1,表示正在读单词
            num++;//单词计数增加
        }
    }
    return num;
}
结果:


解析:

这段代码解决了一个实际问题:统计单词的个数。这个问题的难点是单词间的空格数目是不确定的。

而这里给出的解决方案是使用一个变量word来标识不同的读取状态。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"C语言字符串处理库函数大全-简书"是一篇在简书上的教程,介绍了C语言中常用的字符串处理库函数。 该教程详细介绍了C语言字符串操作的相关函数,包括库函数的使用方法和示例代码。通过该教程,读者可以学习到如何使用C语言中的字符串处理函数来进行字符串的复制、连接、比较、查找、截取等操作。 在这篇教程中,读者可以了解到以下一些常见的字符串处理库函数: 1. strcpy:用于将一个字符串复制到另一个字符串中。 2. strcat:用于将一个字符串连接到另一个字符串的末尾。 3. strlen:用于计算一个字符串的长度。 4. strcmp:用于比较两个字符串的大小。 5. strchr:用于在一个字符串中查找指定字符的第一次出现位置。 6. strstr:用于在一个字符串中查找指定子串的第一次出现位置。 7. strtok:用于将一个字符串按照指定的分隔符分割成多个子串。 8. strncpy:用于将指定长度的字符串复制到目标字符串中。 9. strncmp:用于比较指定长度的两个字符串。 10. sprintf:用于将格式化的字符串输出到一个字符数组中。 这些函数C语言中非常常用,并且对于字符串的处理非常方便。通过学习和掌握这些字符串处理库函数,可以更加高效地完成C语言程序中的字符串操作。 总之,"C语言字符串处理库函数大全-简书"这篇文章提供了丰富的字符串处理库函数以及示例代码,对于C语言开发者来说是一个很好的参考和学习资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值