字符串和字符串数组_数组字符串-程序员宅基地

技术标签: c语言  

字符串

  • 用双引号引起来的就是字符串,字符串由字符组成
  • 字符串使用%s格式化输出
  • 字符串以\0结尾,没有\0就不是字符串
  • 只要是用双引号括起来的都是字符串
  • 字符串的本质就是数组
    注意: 字符串变量和普通的字符数组有一定的区别,C语言规定,字符串必须以\0结尾(作为字符串的结束符号),所以字符串变量的元素个数比字符数组的元素多一个\0
#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    char name[] = "zhangsan";
    
    // %u 表示无符号,sizeof 返回的是一个无符号长整型
    printf("name --> %s  size --> %lu\n", name, sizeof(name));      // name --> zhangsan  size --> 9
    
    // 字符串本质就是一个字符数组,前提是末尾以\0结尾
    char name1[] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n', '\0'};
    printf("name1 --> %s\n", name1);    // name1 --> zhangsan
    
    // 部分初始化中,没有被初始化的元素默认是0, \0 对应的ASCII值是 0
    char name2[9] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n'};
    printf("name2 --> %s\n", name2);    // name2 --> zhangsan
    
    // 字符串的本质就是数组
    char name3[] = "lisi";
    printf("name3 --> %s \n", name3);   // name3 --> lisi
    name3[0] = 'x';
    printf("name3 --> %s \n", name3);   // name3 --> xisi
    

    return 0;
}
字符串输出

字符串输出可以使用printf 和 puts 进行输出,各有利弊


- 输出字符串
	- 使用printf的%s占位符输出
		- 弊端:如果想要换行,必须加上\n
		- 优点:可以自定义格式化需要的字符串,也就是可以按照我们需要的格式来输出
	- 使用puts函数进行输出
		- 优点:可以自动换行
		- 缺点:不可以自定义格式,只能原样输出

// printf
char str[] = “lisi”;
printf(“name = %s!!!\n”, str);
printf("-----\n");

// puts
// 自动换行,只能原样输出
puts(str);
printf("----\n");



#### 字符串输入
字符串输入可以使用 scanf 和 gets 进行输入,各有利弊

  • 输入字符串
    • 使用scanf的%s占位符接收键盘输入的字符串
      • scanf 接收字符串,会以空格,tab,回车作为结束符号,利用scanf接收字符串时,字符串不能出现空格,tab,回车
    • 使用gets接收字符串
// scanf
printf("请输入一个字符串:\n");
char buf[10];
scanf("%s", buf);   // 输入:fdsa fdas
printf("buf --> %s\n", buf);    // buf --> fdsa


// gets
char buf[10];
printf("请输入一个字符串,使用gets接收:\n");
gets(buf);
printf("buf --> %s\n", buf);    // buf --> fdsaf fdsa
字符串常用方法
计算字符串的长度

#include <stdio.h>
#include <string.h>

// 申明函数
int stringLen(char value[]);


int main(int argc, const char * argv[]) {
    
    char string[] = "zhangsan";
    
    // 计算字符串的长度,不包括末尾\0的长度
    
    // 调用系统内置函数strlen 计算字符串的长度,需要先导入 string.h 头文件
    size_t length = strlen(string);     // lenght --> 8
    printf("lenght --> %lu\n", length);
    
    
    // 自定义计算字符串长度的函数
    int length2 = stringLen(string);
    printf("length2 --> %i\n", length2);    // length2 --> 8
    return 0;
}

// 自定义计算字符串长度的函数
int stringLen(char value[]) {
    int count = 0;
    while (value[count] != '\0') {
        count ++;
    }
    return count;
}

字符串拼接

使用内置方法strcat进行2个字符串拼接,将后者拼接到前者后面,前提是前者空余的长度要大于后者的长度,否则会报错
使用内置方法strncat进行2个字符串拼接,可以指定将后者的前多少个字符与前者进行拼接

// 字符串拼接
char str1[20] = "hello";
char str2[10] = " world";

printf("str1拼接前 --> %s\n", str1);        // str1拼接前 --> hello
printf("str2拼接前 --> %s\n", str2);        // str2拼接前 -->  world
strcat(str1, str2);
printf("\n");
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world

// 使用 strncat 可以指定将后者的前多少个字符与前者进行拼接
strncat(str1, str2, 3);		// 最后一个参数3表示指定str2的前多少个字符拼接到str1后面
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world wo
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world
字符串拷贝

strcpy 函数会将源的数据拷贝到目录中,并且会覆盖掉目标中原有的数据,目标的长度必须能够存放拷贝的数据,长度不够会报错
strncpy 函数在strcpy函数的基础之上,增加一个参数,可以指定拷贝几个字符0

// 将str2中的内容拷贝到str1中
char str1[20] = "hello";
char str2[] = " world!";

printf("str1 拷贝前 --> %s\n", str1);      // str1 --> hello
printf("str2 拷贝前 --> %s\n", str2);      // str2 -->  world!
strcpy(str1, str2);
printf("str1 拷贝后 --> %s\n", str1);      // str1 -->  world!
printf("str2 拷贝后 --> %s\n", str2);      // str2 -->  world!

// strncpy 函数在strcpy函数的基础之上,增加一个参数,可以指定拷贝几个字符
char str3[20] = "hello";
char str4[] = "_world!";
strncpy(str3, str4, 2);
printf("str3 拷贝后 --> %s\n", str3);      // str3 拷贝后 --> _wllo
printf("str4 拷贝后 --> %s\n", str4);      // str4 拷贝后 --> _world!
字符串比较

strcmp 会对传入的字符串进行比较,比较完毕后会返回一个整型的值

/*
	int result = strcmp(str1, str2)
	如果result等于0,证明两个字符串相等
	如果result小于0,证明str1小于str2
	如果result大于0,证明str1大于str2
*/

char str1[] = "abc";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> 0

char str1[] = "ab1";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> -50

char str1[] = "absadsa";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> 16

字符串数组

如果想存储一堆字符串可以使用字符串数组,字符串数组就是二维数组

char names[5][20] = {
	"zhangsan",
	"lisi",
	"wangwu",
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/crazy_zhangcong/article/details/88112493

智能推荐

我的世界java路径_我的世界java路径在哪 路径有误怎么设置-程序员宅基地

文章浏览阅读2.7k次。我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里给大家提供的是如果你没有更改过Java的默认安装地址的话Java可能会在的路径,以及寻找Java路径的最好方法。注意:首先你要确认自己的确安装了Java,否则就算是神仙也不能帮你变出没有安装过的东西的..._mc java地址

【小李木耳】出品:一直舍不得丢掉的东西:“一(个)白云、三(个)兔子...” 和“...早日发账”-程序员宅基地

文章浏览阅读841次。 什么是虚拟化3.0时代? 微软公司的云计算服务有哪些? 云计算IDC服务都包括什么? 什么是云计算? 向私有云过渡的步骤有哪些?一直舍不得丢掉的东西:“一(个)白云、三(个)兔子...” 和“...早日发账”(写于2011年12月10日00:17 北京)今天这个话题比较有感觉,就晒一晒我舍不得的两件东西:“一(个)白云、三(个)兔子...” 和“

Unity_用鼠标控制相机旋转、拖拽、视角缩放_unity 相机 平移 拖拽 缩放-程序员宅基地

文章浏览阅读2w次,点赞17次,收藏97次。一、滚轮控制视角缩放 /// &amp;amp;lt;summary&amp;amp;gt; /// 滚轮控制相机视角缩放 /// &amp;amp;lt;/summary&amp;amp;gt; public void CameraFOV() { //获取鼠标滚轮的滑动量 float wheel = Input.GetAxis(&amp;quot;Mouse ScrollWheel&am_unity 相机 平移 拖拽 缩放

精选力扣500题 第22题 LeetCode 88. 合并两个有序数组【c++详细题解】_力扣22 c++-程序员宅基地

文章浏览阅读280次,点赞6次,收藏4次。目录1、题目2、思路13、代码14、思路25、代码21、题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2的元素数量分别为 m 和n。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]_力扣22 c++

php文本框怎么设置好看,一个很不错的CSS改写的大表单文本框和搜索按钮组-程序员宅基地

文章浏览阅读139次。《一个很不错的CSS改写的大表单文本框和搜索按钮组》要点:本文介绍了一个很不错的CSS改写的大表单文本框和搜索按钮组,希望对您有用。如果有疑问,可以联系我们。先看效果图:HTML代码部分:开始爬取CSS部分:/*大搜索框*/.searchInputBox{height:62px;width:810px;margin:0auto;border-radius:6px;background-..._css 好看 文本框

select下拉框启用和禁止-程序员宅基地

文章浏览阅读3.4k次。描述:通过你好来判断hello是否启用和禁止html:<li> <span class="xin">*</span><label>你好</label> <select id="dimAcc"> <option >类似</option> ..._select下拉框启用和禁止

随便推点

【STM32知识点】STM32基础知识总结-程序员宅基地

文章浏览阅读10w+次,点赞699次,收藏5.9k次。目录【GPIO外设】一、GPIO的八种工作模式二、总结在STM32中选用IO模式【RCC时钟】【NVIC是嵌套向量中断控制器】一、优先级定义二、优先级分组【EXTI外部中断/事件控制器】【SysTick系统定时器】【通讯的基本概念】一、串行通讯与并行通讯二、全双工、半双工及单工通讯三、同步通讯与异步通讯四、通讯速率【串口通讯】一、物理层:二、协议层【I2C】一、物理层二、协议层【SPI】一、SPI物理层二、协议..._stm32基础知识

主流Java数据库连接池比较及前瞻_java 数据库连接池比较好-程序员宅基地

文章浏览阅读8.4k次,点赞5次,收藏18次。点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!主流数据库连接池常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、..._java 数据库连接池比较好

系列文章传送门_关于传送门文章-程序员宅基地

文章浏览阅读346次。一、《Python机器学习基础教程》学习笔记系列① 《Python机器学习基础教程》学习笔记系列-1-基本库的安装与基本使用以及初步了解区分鸢尾花种类的机器学习模型二、记录自己用python搭建个人博客系统的完整过程① 记录自己用python搭建个人博客系统的完整过程(一)② 记录自己用python搭建个人博客系统的完整过程(二)番外篇③ 个人博客 修改markdown代码块背景颜色..._关于传送门文章

JAVA 正则表达式 (超详细,转)_java 这则表达式-程序员宅基地

文章浏览阅读693次。在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。  可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。_java 这则表达式

Vue笔记整理,12.项目-完成tabbar的小图标设置_tab-bar设置图标-程序员宅基地

文章浏览阅读912次。一、前言上一节我们介绍了:vs code工具的一些特殊使用,使用vs code默认集成的Git工具快速提交代码,详细可参考博文:原创Vue笔记整理,11.项目-使用vs code默认集成的Git工具快速提交代码这篇我们将介绍项目-完成tabbar的小图标设置二、完成tabbar的小图标设置更新中。。。..._tab-bar设置图标

D4 - Makefile_d4文件-程序员宅基地

文章浏览阅读109次。第一节 Make与MakefileMake简介Make将只编译改动的代码文件,而不用完全编译Make使用Makefile1:Make只能读取Makefile文件2:Makefile功能包含’由谁生成’可执行文件,‘怎么生成可执行文件’.‘生成什么可执行文件’Makefile格式生成什么:由谁生成 <table> commandMakefile隐含规则第二节 创建与使用变量Make变量(变量必须大写)去""的字符串Make变量为了便_d4文件

推荐文章

热门文章

相关标签