热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言学习之基础知识点介绍(十一):字符串的介绍、使用

本节主要介绍c语言中的字符串的应用。一:字符串介绍因为c语言中没有像Java、C#那样的字符串类型,所以无法直接用字符串。需要借助数组来解决这个问题。*定义:把多

本节主要介绍c语言中的字符串的应用。

一:字符串介绍

        因为c语言中没有像Java、C#那样的字符串类型,所以无法直接用字符串。需要借助数组来解决这个问题。

/*
定义:把多个字符连在一起就叫字符串。但是在c语言中要正确描述字符串,需要说成以'\0'结尾的字符集合。

用数组解决字符串问题:
        1、长度需要 +1。
        2、在末尾加一个'\0'
然后用%s输出。
例如:
         char chs[4] = {'a','b','b','\0'};
          printf("%s \n",chs);

语法:
         1、char 变量名[实际长度+1] =  {'a','b','b','\0'};
               char str[4] = {'a','b','b','\0'};
         2、char 变量名[] =  {'a','b','b','\0'};
               char str[] = {'a','b','b','\0'};
         3、char 变量名[实际长度+1] =  "字符串";
               char str[4] = ”abc”;//记得不用加\0
         4、char 变量名[] =   "字符串";
               char str[] = ”abc”;//记得不用加\0
因为char只有一个字节,中文有3个字节,所以在保存中文的时候需要这样:
char str[] = "哈哈哈哈哈":

*/

二、字符串的输入和输出

/*
输出:用 %s。
输入也是用 %s。
注意:
       1、数组名是一个地址常量,如果用scanf进行输入,只需要写数组名,不需要写&。
       2、如果要输入,数组的长度一定要足够长,不然可能会出现未知错误(越界造成的)。

例如:
char str[] ;
scanf(" %s ",str):
printf("str = %s \n",str);
*/

三、字符串的判断

/*
字符串的比较:
例如:
  char str1[] = "abc";
  char str2[] = "abc";
  if(str1==str2){
     printf("相等");
  }else{
    printf("不等");
  }
//永远输出: 不等
所以,不能用  ==   来判断两个字符串是否相等,因为数组名是一个地址常量。

正确的方法:
    1、需要导入#include 头文件
    2.、使用strcmp
注意:使用strcmp,如果返回0,代表两个字符串相等。
例如:
  char str1[] = "abc";
  char str2[] = "abc";
  int result = strcmp(str1,str2); //结果是0,
 // if(result == 0){ //两种都可
  if(!strcmp(str1,str2)){
     printf("相等");
  }else{
    printf("不等");
  }


*/            

四、字符串的其他表示法

/*
 1、数组表示法:
             char str[] = "abc";
 2、常量:
           "abc";
 3、指针表示法:
           char *str = "abc";

数组表示法和指针表示法的区别:
        1、数组表示法可以改变里面的值,指针表示法不可以改值。
        2、数组表示法可以接受用户输入的值,指针表示法不可以接收。
        3、数组表示法不可以用==来判断一个字符串和一个字符串常量是否相等,指针表示法可以用==,但是不推荐这样做,推荐用strcmp。
例如:
        char *str = "abc";
        if(str == "abc"){
        
        }
*/

 五、c语言中字符串常用的函数

/*
输出:
         1、printf("%s \n",字符串变量);
         2、puts(字符串变量);
区别:1、puts不需要格式化控制符,printf需要。
            2、puts只能输出字符串,printf其他类型都可以输出。
            3、puts自带换行,printf没有自带换行。

输入:
         1、scanf(" %s ",字符串变量);
         2、gets(字符串变量);
区别:1、gets只能输入字符串,scanf其他类型都可以输入。
            2、gets不需要格式化控制符,printf需要。
puts和gets都在strdio.h中 ,需要导入(#include )。

其他函数:(都在string.h头文件中,导入#include )
1、strcmp
     语法:strcmp(字符串1,字符串2);比较两个字符串谁大谁小(比较的是ASCII码)。如果第一个字符串比第二个字符串大,返回一个正整数;反之,返回一个负整数。如果第一个字母不等,就直接返回结果,第一个相等,就继续比较第二个字母,如果不等,就直接返回结果,以此类推。
例如:
char str1[] = "abc";
char str2[] = "zbc";
printf("%d \n",strcmp(str1,str2)); //输出:-25,不等,只有输出0的时候才是相等。
 
2、strcpy
       语法:strcpy(字符串数组,字符串2); 是把字符串2的内容拷贝到字符串数组中;如果原先的字符串数组中有值,会被覆盖。
char str1[] = "abc";
char str2[] = "哈哈哈";
printf("%s \n",strcpy(str1,str2)); //输出:哈哈哈

3、strcat
       语法:strcat(字符串数组,字符串2); 是把字符串2的内容追加到字符串数组后面。
char str1[] = "abc";
char str2[] = "哈哈哈";
printf("%s \n",strcat(str1,str2)); //输出:abc哈哈哈

4、strlen
       语法:strlen(字符串);计算字符串的实际长度(占用的字节数),\0不参与计算。


介绍两种不常用的函数:
putchar:输出字符,不带换行
例如:putchar('a');

getchar:输入字符,改函数是有返回值的,返回值就是你输入的字符。
例如:
printf("请输入一个字符:\n");
char chs = getchar();//输入a
printf("chs = %c",chs);//输出:chs=a


*/

 

六、一些注意事项

/*
 '0' != 0;因为字符 0  对应的ascii码是48,0对应的ascii码是‘\0’。
  0 == '\0'
 
指针表示法:
char  *str = "abc";//指针自己不存字符串,而是指向常量区的某个字符串地址。
数组表示法:
char str[]="abc";

区别:
          指针表示法不能接收用户的输入,不能被修改,而数组表示法都可以。

在连接字符串的时候,需要注意:
        strcat(字符串1,字符串2);
字符串1需要足够长的长度来保存拼接后的字符串。
*/

 


推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
author-avatar
猪宝宝的事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有