中山市中国建设银行网站,提供网站建设工具的公司,新品发布会的策划方案,网上培训ui设计文章目录 字符串基本概念定义和初始化字符串输入输出如下格式均可实现输入输出 字符串遍历操作字符串和字符指针字符指针的赋值引用 通用的字符串处理函数输入输出复制 连接 比较 求长度链接比较长度查找替换 字符串
基本概念
1.C语言字符串本质就是数组的延伸#xff0c;以…文章目录字符串基本概念定义和初始化字符串输入输出如下格式均可实现输入输出字符串遍历操作字符串和字符指针字符指针的赋值引用通用的字符串处理函数输入输出复制 连接 比较 求长度链接比较长度查找替换字符串基本概念1.C语言字符串本质就是数组的延伸以**‘\0’**结尾的字符数组空字符NULL的ascii码为0定义和初始化// 方式1指定大小并初始化剩余自动补\0charstr1[20]Hello, World!;// 方式2不指定大小编译器自动计算charstr2[]Hello, World!;// 方式3逐个字符初始化charstr3[]{H,e,l,l,o,\0};str 在内存当中如下存储 0: H 1: e 2: l 3: l 4: o 5: , 6: 7: W 8: o 9: r 10: l 11: d 12: ! 13: \0 // 字符串结束符 14: \0 // 自动填充的\0 15: \0 // 自动填充的\0 16: \0 // 自动填充的\0 17: \0 // 自动填充的\0 18: \0 // 自动填充的\0 19: \0 // 自动填充的\0字符串有效长度的个数就是有效字符的个数不包括\0字符串输入输出如下格式均可实现输入输出#defineMAXLINE80intstr[MAXLINE];inti0;while((str[i]getchar())!\n){//回车即停止输入i;}str[i]\0;//很关键getchar手动输入必须要添加’\0’!!#defineMAXLINE80intstr[MAXLINE];// 使用scanf输入遇到空格停止printf(Enter a string (no spaces): );scanf(%s,str);printf(You entered: %s\n,str);#defineMAXLINE80intstr[MAXLINE];// 使用fgets输入可以包含空格printf(Enter a string (can have spaces): );fgets(str,sizeof(str),stdin);printf(You entered: %s,str);这两种方法均会在结尾自动添加’\0’以下三种等价static char s[6] { ‘H’, ‘a’, ‘p’, ‘p’, ‘y’ };static char s[6] { ‘H’, ‘a’, ‘p’, ‘p’, ‘y’, 0 }; 0代表字符’\0’也就是ASCII码为0 的字符static char s[6] { ‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’ };字符串由有效字符和字符串结束符’\0’组成使用字符串常量static char s[6] { “Happy” };static char s[6] “Happy”;*字符串有效长度就是有效字符的个数不包括\0,数组长度大于等于有效长度1字符串遍历循环条件s[i]!‘\0’包含字符串空格不包含结尾\0。操作#defineM26sancf(%d,offset);if(offsetM){offset%26;//移位相当于取余数}for(inti0;str[i]!0;i){if(str[i]Astr[i]Z){if((str[i]-Aoffset)M){str[i]str[i]offset;}else{str[i]str[i]offset-M;//直接在整数层面操作}}elseif(str[i]astr[i]z){if((str[i]-aoffset)M){str[i]str[i]offset;}else{str[i]str[i]offset-M;//直接在整数层面操作}}}最终要输出一个数字s[i] - 0’恰好为这个和数字的整数值‘9’ - ‘0’ 9 ‘九的ASCII码’进制转换模板字符串和字符指针“array”“point”用一对双引号括起来的字符序列被看作一个特殊的一维字符数组在内存中连续存放。实质上是一个指向该字符串首字符的指针常量%s的灵活使用charsa[]array;char*sp[]point//输出printf(%s,sa);//输出arrayprintf(%s,sp);//输出“point”printf(%s,string);//“输出string”printf(%s,sa2);//输出rasyprintf(%s,string1)//输出tring//sa 1指向第二个元素在上述过程sa所代表的字符串只能改变数组元素的内容如果要改变指针sp所代表的字符串通常直接改变指针的值可以指向新的字符串char*spThis is a string;strcpy(sa,Hello);//来自string.hspHello;sa “Hello”非法数组名是常量不能赋值字符指针的赋值引用定义字符指针后如果没有对他赋值指针的值不确定不可以引用char*s;scanf(%s,s);//不可以这样写char*s,str[20];sstr;scanf(%s,s);//应该这么写//定义指针变量时想将它的初值置为空char*sNULL;通用的字符串处理函数输入stdio.h(fgets fputs)string.h(其他的操作)(strcspn等等)手动循环输入charstr[80];inti0;while((str[i]getchar())!\n){i;}str[i]\0;scanf(“%s”,str);可能会引起越界不加取址运算符遇到回车或空格输入结束自动将输入的一串字符和’\0’送入数组strscnaf(“[^\n]”,str)这样可以读入空格scanf(“%79[^\n]”,str) 可以控制输入长度gets(str)遇到回车输入结束并自动将输入的一串字符和’\0’送入数组str,不会检查是否越界慎用fgets 非常好用 会读取换行符并存储实际存储示例如果输入hello然后按回车fgets会存储h e l l o \n \0intlen10;while(s1[len1]!\0s1[len1]!\n)len1;s1[len1]\0;这样可以实现将末尾换行符改为’\0’.此时有两个’\0’char*fgets(char*string,intn,FILE*string)//成功返回值时字符串指针即传入的参数str//失败返回NULL指针charstr[80];fgets(str,sizeof(str),stdin);//用法//去掉回车str[strcspn(str,\n)]\0;输出手动循环输出charstr[80];inti0;for(i0;str[i]!\0;i){putchar(str[i]);}printf(“%s”,str);printf(“%s”,“Hello”);puts(str)puts(“hello”)fputsintfputs(constcharstr,FILE*string)//string 是输出流通常用stdout标准输出//返回值是整型数0或正数//失败返回EOF-1磁盘空间不足文件流错误或者其他错误fputs(str,stdout);输出字符串后自动换行输出参数可以是字符数组名或字符串常量以’\0’结束复制 连接 比较 求长度复制 strcpy(str1,str2) str2复制到str1中连接 strcat(str1,str2)比较 strcmp(str1,str2)长度 strlen(str)查找替换 strcspn以上来自string.h链接strcat(str1,str2);连接两个字符串str1和str2并将结果放入str1中自动去掉str1末尾的’\0’#includestdio.h#includestring.hintmain(){charstr1[80],str2[20];gets(str1);gets(str2);strcat(str1,str2);puts(str1);return0;}//str1中Let us\0//str2中go.\0// str1中Let us go.\0// str2中go.\0比较strcmp(str1,str2);比较两个字符串str1和str2的大小按照字典顺序ASCII码序对str1和str2对应位置的字符从左到右依次进行比较第一个不同的字符的ASCII码值更大的大小决定了整个字符串的大小所有字符相等str1str2相等。相等 返回0str1 str2 返回1str1 str2 返回-1注意如果单独比较字符数组的名字则比较的是字符串首元素的地址手动实现#includestdio.hintmain(){chars1[]JEI JING;chars2[]JING;inti,j;intflag0;i0;while((s1[i]!\0)(s2[i]!\0)){//循环条件均有意义if(s1[i]!s2[i]){flags1[i]-s2[i];break;//第一个不一样的元素}i;}if((s1[i]\0)(s2[i]!\0))flag-1;if((s1[i]!\0)(s2[i]\0))flag1;//这两个if判断是否长度不一样//长度更短的更小if(flag0)printf(s1 s2\n);elseif(flag0)printf(s1 s2\n);elseprintf(s1 s2\n);return0;}长度strlen(str) 计算有效长度不包含’\0’strlen(“hello”) 5;手动实现#includestdio.hintmain(){chars[101];intI;gets(s);I0;while(s[I]);//实现循环统计先返回I再实现I//检测到\0就停止gets自动加上I--;//I就是字符串长度}查找替换strcspn(数组名查找元素)返回此下标input[strcspn(input,\n)]\0;