一、C语言中的字符串

字符串是一种重要的数据类型,但是C语言并没有显示的字符串数据类型,不像java有String ,OBC有NSString等等。所以C语言中的字符串一般以字符串常量的形式出现或者存储与字符数组中。

每个字符串的末尾都添加了代码值为0的特殊字符,这个字符称为空字符(不要和NULL搞混C中的字符串),写作\0。字符串,总是由\0字符结束,所以字符串的长度永远比字符串中的字符数多1。可以将\0字符添加到字符串的结尾,但是这会使字符串的末尾有两个\0的字符。\0 即是字符串结束的标志。

二、字符数组存储字符串 声明如:char  str[4];

初始化如:str="abc";

例子1:

int main(void)

{

char str[3]=“123”;

printf("%s",str);

return 1;

}

这样的程序,编译的时候直接不能让通过,会报下面的错误:

: array bounds overflow。

因为,这样的写法就是声明并初始化一个字符串,而字符串必须使用\0结尾,所以数组才会越界。如果像下面:

例子2:

int main(void)

{

char str[3]={'1','2','3'};

printf("%s",str);

return 1;

}

这样写,就是声明并初始化一个字符数组,当然不会报错,可是看输出

结果却和奇怪,其实一点也不用奇怪,用%s的形式输出一个字符数组,那么就会把这个字符数组当字符串输出,可是他并不是一个正确的字符串格式,所以只能根据数组指针的后移,一直不断的输出,直到遇到内存中随机的出现的\0才会结束,所以才会有这样的结果。

所以在声明和初始化一个字符串的时候一定要注意。一般可以这样去声明和初始化一个字符串:

char str[]="123123asda";

数组的长度自己并不指定,而是有系统自己确定,这样就不会出现数组越界的问题了。

三、使用库函数操作字符串

字符串函数在头文件中声明,所以如果要使用它们,需要在程序的开始处使用include包含进来。

1、复制字符串

strcpy

函数原型:char *strcpy(char *destin, char *source);

参数类型为字符数组名,destin为目标字符串,source为源字符串。将字符串source的内容复制到destin,注意该函数不检查数组长度,所以要确保destin的数组能够容纳source中的所有字符。

另一个可用的函数strncpy

函数原型;char * strncpy(char *dest, char *src, size_t n);

将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。第三个参数是一个size_t类型的整数。它指定了要复制的字符数n,举例:

2、检测字符串的实际长度

strlen

函数原型: size_t strlen(conset char *s);

功能: strle函数求的是字符串的长度,它求得方法是从字符串的首地址开始到遇到第一个'\0'停止计数,如果你只定义没有给它赋初值,这个结果是不定的,它会从字符串首地址一直记下去,直到遇到'\0'才会停止。

sizeof(string)可以输出一个字符串占的字节数,因为一个char是一个字节,在加上结束符\0(可能不止一个\0),所以sizeof得出的结果比字符串实际的长度大。

而是用strlen(string)  则可以得出字符串的实际长度。

size_t数据类型

类型size_t在标准库头文件中定义,它也是运算符sizeiof()的返回类型。类型size-t定义了一个无符号的整数类型unsigned int。之所以要这么做,是考虑到代码的可移植性。在各种C语言中,sizeof()和strlen()函数的返回类型互不相同。这是由编译器的作者来决定的。把这个类型定义为size_t,并把size_t定义放在头文件中,非常便于在代码中包容这种依赖性。

所以,要正确的使用size_t类型,因为它是一个无符号整数,在表达式中使用无符号数可能导致不可预料的结果,如下:

if(strlen(x) >= strlen(y))

if(strlen(x) - strlen(y)>=0)

上面这两个表达式看起来是相当的,实际上它们是不等的。第一条语句会按照预想的工作,但是第二条语句就永远都是成立的,因为两个无符号整数的运算结果是一个无符号整数,永运都是>=0的。

所以要注意了,可以将得到的size_t强转为int类型,在用于计算。

3、连接字符串

strcat

函数原型: char *strcat(char *destin, char *source);

它会将字符串source连接到字符串destin的末尾,并且返回destin

也可以使用strncat

函数原型:用 法: char *strcat(char *destin, char *source,size_t n);

第三个参数也是size_t的类型,这个函数是表示将字符串source的前面n个字符连接到destin的末尾

4、比较字符串

strcmp

函数原型:int strcmp(char *str1, char *str2);

如果str1>str2 返回值>0,如果str1=str2 返回值=0,如果str1

strncmp

函数原型: int strncmp(char *str1, char *str2, unsigned maxlen);

比较两个字符串的前maxlen个字符

strnicmp

函数原型: int strnicmp(char *str1, char *str2, unsigned maxlen);

比较两个字符串的前maxlen个字符,不区分大小写。

5、搜索字符串

strchr

函数原型:char *strchr(char *str, char c);

第一个参数是要搜素的字符串(是char数组的地址),第二个参数是要查找的字符。这个函数会从字符串的开头开始搜索,返回在字符串中找到的第一个给定字符的地址。这是一个在内存中的地址,其类型为char*,表示“char的指针”,所以要存储返回值,必须创建一个能存储字符地址的变量。如果没有找到给定的字符,函数就会返回NULL,他相当于0,表示这个指针没有指向任何对象。

举例:

#include

#include

int main(void)

{

char str1[]="abcd";

char *p=strchr(str1,'c');

if(p!=NULL)

{

int a=p-str1;

printf("%d",a);

}

return 1;

}

strtchr和strchr非常类似,只不过是从字符串末尾开始查找。

strstr

函数原型;_CRTIMP char *  __cdecl strstr(const char *, const char *);

它查找一个字符串中的子字符串,返回找到的第一个子字符串的位置指针。如果找不到匹配的字符串串,就返回NULL。

#include

#include

int main(void)

{

char str1[]="abcd";

char str2[]="cd";

char *p=strstr(str1,str2);

if(p!=NULL)

{

int a=p-str1;

printf("%d",a);

}

return 1;

}

6、分析和检测字符串

islower()    小写字符

isupper()    大写字母

isalpha()   大写或小写字母

isalnum()  大写或小写字符,或数字

isprintf()   可打印字符,包括空格

isgraph()  可打印字符,不包括空格

isdigit()   十进制数字的字符('0'~'9')

isxdigit()   十六进制数字的字符('0'~'9'、‘A’~'F','a'~'f')

isblank()  标准空白字符(空格、'\t')

isspace()   空白字符(空格、'\n','\t','\'v','r\','\f')

ispunct()     isspace()和isalnum返回false的可打印字符

toupper()  转变为大写字符

tolower()  转变为小写字符

atof()      从字符串中生成double类型的值

atoi()      从字符串中生成int类型的值

atol()      从字符串中生成long类型的值

atoll()    从字符串中生成long  long类型的值

四、使用宽字符

使用宽字符串与使用前面的字符串一样简单。宽字符串存储在wchar_t类型的数组中,宽字符串常量只需要在前面加上L修饰符。举例:

wchar_t proverb[]=L"A kls a";

wchar_t字符占用2个字节。proverb字符串包含7个字符和终止空字符,所以占用16个字节。

如果要使用printf()将字符串输出到屏幕上,必须使用%S格式指定符,而不是用于ASCII字符串的%s,

如果使用了%s,printf()函数就假定字符串包含单字节字符,这样结果就不正确了。

宽字符的操作函数:

头文件声明了一些函数来操作宽字符串,它们对应于处理一般字符串的函数。

c语言中字符怎么表示6,6、C语言中的字符串相关推荐

  1. 算法014:判定字符串中字符是否唯一:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

    题目:判定字符是否唯一:实现一个算法,确定一个字符串 s 的所有字符是否全都不同.示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = &quo ...

  2. java中字符流和字节流的区别_java中字节流和字符流有哪些区别

    java中字节流和字符流的区别有:1.定义不同:2.结尾不同:3.处理方式不同:4.缓冲区不同:5.编码方式不同.字节流默认不使用缓冲区,而字符流使用缓冲区.字节流采用ASCII编码,字符流采用uni ...

  3. java中字符 的含义 有什么作用_Java中字符串常见题之String相关讲解

    今天给大家带来的是在面试中经常被问到的一道题: 无论在Java还是Android中,String是一个很常见的类,但是大家真的很了解吗,我这里有几个题: 1. String str1 = " ...

  4. C语言中字符型和浮点型能否相加,C语言中数据结构的基本类型(整型、浮点型和字符型)...

    #include int main() { /********************************************************** // 我们列出的是VS2008的内存 ...

  5. c语言中字符指针加加操作,C语言 指针操作练习

    /* *  题目: *   将一字符串用数组输出: *   要求如下: *   1.字符串str="ls  -wl  -jsj  lst  dwoc  sllj –woih  "; ...

  6. c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf

    C语语言言中中"不不受受限限制制"的的字字符符串串函函数数总总结结 "不不受受限限制制的的"字字符符串串函函数数 按 <C和指针>中所说,那些常用的 ...

  7. c语言用字符输出李字,二级C语言历年真题汇总__第10篇对文件的输入输出-李赛红.doc...

    第10章 对文件的输入输出 (2012年9月真题)(40)有以下程序 #include main() {?FILE *fp;int i,a[6]={1,2,3,4,5,6}; ???fp=fopen( ...

  8. c 语言往字符数组里面赋值,关于c 语言字符数组的赋值

    首先,在语法上,三句都是正确的,但按照C语言中字符串的用法,第二句是错误的,可能导致无法预料的错误结果. 在C语言中,我们一般说的字符串,其实就是字符数组(区别于C++,Java等语言),而用类似ch ...

  9. c语言将字符输出到屏幕中央,C语言printf“()”真的会将输出发送到屏幕吗?

    printf函数是C语言的标准函数库中的一个输出函数,它的功能就是表面上把数据输出到屏幕中.这里要注意一下,我提到了一个词是"表面"!看似好像C语言的printf函数把数据输出到屏 ...

  10. c语言判断字符是否对称,2020-07-23(C语言)数据结构-试设计算法判断该链表的全部n个字符是否中心对称。...

    //设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型.试设计算法判断该链表的全部n个字符是否中心对称.例如xyx,xyyx都是中心对称. include incl ...

最新文章

  1. jQuery如何动态删除TR,input按钮删除本行记录,checkbox全选反选
  2. tfs 点获取最新,如果检查到大量冲突
  3. js 调 CDHtmlDialog API
  4. Java小案例(二) 用数组实现增删查改排序
  5. 超级便宜的鸿蒙开发板环境搭建-编译-烧录
  6. 使用ActiveReports for .net 进行报表开发(十)--交叉变换背景 (转)
  7. ModuleNotFoundError: No module named ‘Crypto‘ 踩坑
  8. RPC架构简介与原理
  9. python输入一系列的值_python中的input()和print()输入输出函数应用实例笔记
  10. Big FAT32 Format Pro(U盘格式化工具)官方正式版V2.0 | u盘无法格式化怎么办 | 万能u盘修复工具下载 | 突破FAT文件系统4GB的限制
  11. 聊天室群聊以及私聊功能的实现
  12. Cacti之交换机端口无法正常显示
  13. 概率论——连续性随机变量及分布函数的定义
  14. 携程测试经理网盘爆出面试题!!!【内附答案】
  15. 业绩堪忧,上市曲折,友宝梦醒港股?
  16. 就是美女,怎么了!!!
  17. 老卫带你学---DDSM乳腺癌数据研究
  18. Blender雕刻模块:2.81新功能遮罩提取(Mask Extract)
  19. 【RTX操作系统教程】第6章 RTX操作系统源码方式移植
  20. 艺术画笔见乾坤—Matplotlib

热门文章

  1. python自动化办公 51cto_Python办公自动化之从Word到Excel
  2. python手机版-python手机版
  3. python公开课免费-公开课 | Python大牛免费带你4天入门Python
  4. python和c语言的区别-c语言和python的区别是什么
  5. python可以自学编程吗-编程学习第一步,让你20天搞定Python编程
  6. HTK语音识别基础教程.ppt
  7. 语音识别准确率终于提升了 以后可以随时和机器人聊天
  8. i18n调用自己参数_Spring Boot :I18N
  9. 模块是python中普通的文件吗_python 包和模块
  10. Git创建分支并上传~满满的干货哦