栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言字符串总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言字符串总结

目录

1、字符串的初始化  

2、字符数组中scanf的使用 

3、字符数组中gets的使用(不推荐)

4、字符数组中fgets的使用

5、字符数组中puts的使用

6、字符数组中fputs的使用

7、字符数组中strlen的使用

8、字符数组中strcpy、strncpy的使用

9、字符数组中strcmp、strncmp的使用

10、字符数组中strcat、strncat的使用

  • C语言中没有字符串类型,字符串是存在字符数组中的。
  • 字符串一定是字符数组,字符数组不一定是字符串。
  • 如果字符数组以''或者数字0结尾,那么这个字符数组就是字符串。
  • 注意越界问题
  • 加上头文件#include

    1、字符串的初始化  

  • #include
    #include
    int main(){
    	char a1[10] = {'h','e','l','l','o'};//字符数组
    	char a2[10] = {'h','e','l','l','o',''};//字符串
    	char a3[10] = {'h','e','l','l','o',0};//字符串
    	char a4[10] = "hello";//字符串,系统自动在字符串结尾分配一个''
    	char a5[] = "hello";//字符串
    	char a6[] = "hello";//字符串
    	char a7[] = "12hello";//字符串;后面最好不要接数字,避免组成其他转义字符 
    	printf("a1 = %sn",a1); 
    	printf("a2 = %sn",a2); 
    	printf("a3 = %sn",a3);
    	printf("a4 = %sn",a4); 
    	printf("a5 = %sn",a5); 
    	printf("a6 = %sn",a6); 
    	printf("a7 = %sn",a7); 
    	return 0;
    }

      

    2、字符数组中scanf的使用 

  • scanf缺点:不做越界检查。
  • scanf在遇到空格和tab时会停止读取,在遇到n也就是回车时结束输入。
    #include
    #include
    int main(){
    	char str[100] = {0};
    	char tmp[100] = {0};
    	char a[10];
    	scanf("%s", str);
    	printf("%sn", str);
    	scanf("%s",tmp);
    	printf("%sn",tmp);
    	scanf("%s", a);
    	printf("%sn",a);
    	return 0;
    }

      

  • #include
    #include
    int main(){
    	char str1[10];
    	char str2[10];
    	scanf("%s", str1);
    	scanf("%s", str2);
    	printf("%sn",str1);
    	printf("%sn", str2);
    	return 0;
    }

  • 3、字符数组中gets的使用(不推荐)
  • #include
    #include
    int main(){
    	char str[10];
    	gets(str);
    	printf("%sn",str);
    	return 0;
    }
  • a. gets允许有空格,不读换行符,不做越界检查,不安全

  • b.gets(str)与scanf(“%s”.str)的区别gets(str)允许输入的字符串含有空格scanf(“%s”.str)不允许含有空格

  • c.由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到
    文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况

4、字符数组中fgets的使用
#include
#include
int main(){
	char str[10];
	fgets(str,sizeof(str),stdin);
	printf("%sn", str);
	return 0;
}


1)一般形式: char *fgets(char *s,int size,FILE*s tream);
2)功能:从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size -1个字符为止,最后会自动加上字符'’作为字符串结束
3)注意事项:

a.如果输入内容>size-1,只取size-1

b.空格,换行符也会读入

c.fgets函数是安全的。

5、字符数组中puts的使用
#include
#include
int main(){
	char str[] = "china";
	puts(str);
	printf("%s",str);
	return 0;
}

1)一般形式:int puts(const char *s );
2)功能:标准设备输出s字符串,在输出完成后自动输出一个'n'。

3)注意事项:
a. puts只是将字符串输出到屏幕显示时自动加换行,但字符串本身并没有变化。
  

6、字符数组中fputs的使用
#include
#include
int main(){
	char str[] = "china";
	fputs(str,stdout); 
	return 0;
}

1)一般形式: int fputs(const char * str,FILE* stream) ;
2)功能:将str所指定的字符串写入到stream指定的文件中,字符串结束符''不写入文件。

3)注意事项:
a.fputs不会自动加换行符
b.如果是固定输出到屏幕,则写为stdout。
 

7、字符数组中strlen的使用

功能:计算指定字符串str的长度,不包含字符串结束符''

sizeof是测数据类型的长度,不会因为结束符而提前结束。

#include
#include
int main(){
	char str1[] = "china";
	char str2[] = "china";
	char str3[10] = "china";
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	int len3 = strlen(str3);
	printf("%d,sizeof(str1)=%dn", len1,sizeof(str1)); //5 6 
	printf("%d,sizeof(str2)=%dn", len2,sizeof(str2)); //0 7
	printf("%d,sizeof(str3)=%dn", len3,sizeof(str3)); //5 10
	
	char str4[10];
	scanf("%s",str4);
	printf("%dn",strlen(str4)); //读空格前面的 
	
	char str5[10];
	gets(str5);
	printf("%dn",strlen(str5));//可以读空格,空格这些字符也记作长度 
	
	char str6[10];
	fgets(str6,sizeof(str6),stdin); //fgets可以读换行符 
	printf("%dn",strlen(str6));//加上换行符和空格 ,但不读 
	return 0;
}

8、字符数组中strcpy、strncpy的使用

strcpy:

功能:把src所指向的字符串复制到dest所指向的空间中,''也会拷贝过去。

复制元素:从首元素开始到''结束。

strncpy:

功能:把src所指向的字符串的前n个字符复制到dest所指向的空间中,

是否拷贝结束符看指定的长度是否包含''

#include
#include
int main(){
 	char src[100] = "hello world";
	char dest[100];
	char src2[100] = "hello world";
	char dest2[100];
	strcpy(dest,src);
	strcpy(dest2,src2);
	printf("%sn",dest);//hello world
	printf("%sn",dest2);//hello world
	return 0;
}

9、字符数组中strcmp、strncmp的使用

strcmp:

功能:比较s1和s2的大小,比较的是字符ASSCII码大小

strncmp:

功能:比较s1和s2前n个字符的大小,比较的是字符ASSCII码大小

俩函数返回值如下:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。
#include
#include
int main(){
 	char s1[] = "abc";
 	char s2[] = "abcd";
 	int result  = strcmp(s1,s2);
 	printf("%dn", result);
	return 0;
}

10、字符数组中strcat、strncat的使用

strcat:

功能:将src字符串连接到dest的尾部,''也会追加过去。

strncat:

功能:将src字符串前n个字符连接到dest的尾部,''也会追加过去。
 

#include
#include
int main(){
 	char src[] = "nihao";
 	char dest[] = "China";
	strncat(dest,src,5);
	printf("%sn",dest);  //Chinanihao
	return 0;
}

以上就是我对字符串学习的总结。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号