首页 > 其他分享 >C语言基础-字符数组与字符串

C语言基础-字符数组与字符串

时间:2024-12-17 20:03:46浏览次数:7  
标签:字符 name C语言 char 数组 printf 字符串

字符数组

概念

元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。C语言中,字符是字节字符。

字节字符:一个字符占一个字节,在C语言中,使用char表示字节

char a = 'A';
char b = '1';
char c = 65;
//以上都是正确的

char d = "A";
char e = '司';
//以上都是错误的
语法
char 数组名[容量]
char 数组名[行容量][列容量]

字符数组的语法就是一维二维数组的语法

如果我们的char数组初始化时没有完全赋完值,空出来的地方使用\0进行填充

案例

注意:

①如果定义时不初始化,元素值不确定

char arr1[2];	//此时属于未初始化,元素值是不确定的(随机的)
char arr2[5] = {'a','b','c'}; //此时属于不完全初始化,未初始化的元素使用\0进行填充

②如果提供的字符个数大于数组的长度,则按语法错误处理;如果字符个数小于数组长度,后面的元素自动为空字符(\0)

③如果提供的字符个数与数组的长度相同时,可省略数组长度,系统会自动确定元素个数,适合字符个数较多时。

字符串和字符串结束标志

说明

  • C语言规定,字符串以字符\0作为结束标志
char c[8] = {'a','b','c','\0','\0','\0','\0','\0'};
  • 编译系统对字符串常量自动加一个\0作为结束标志
  • 程序中往往通过判断\0来检测字符串是否结束
  • \0的ASCII码为0,不是一个可显示的字符,是"空操作符",什么都不做,不会增加有效字符,仅是一个供判别的标志
字符数组的多样表示

char数组可以以数组的方式一个个输出每个字符,char数组也可以以字符串的方式整体进行输出所有字符

#include <stdio.h>

int main()
{
	char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d'};
	char s2[] = {"hello world"};
	char s3[] = "hello world";
}

注意:

  • 字符串的长度与字符数组的长度不一定相同
  • 利用字符串常量可以对字符数组进行初始化,但不能用字符串常量为字符数组赋值
字符串的基础操作

在用格式说明符%s进行输入输出时,其输入输出项均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统自动在字符串最后加结束符"\0",在输出时,遇到结束符"\0"作为输出结束标志。

对于字符串的操作,需要使用到一些系统提供的函数

字符串输入
scanf
scanf("%s",数组名);

例子:

/**
 *字符串的输入
 *语法:scanf("%s",数组名);
 */

void test1()
{
    //创建一个char数组,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    scanf("%s",name); //注意:如果是字符串,这里不是变量地址,是变量名i
    printf("您的姓名是%s\n",name);
    strcpy(name,"I LOVE YOU!");
    printf("%s\n",name);
}

注:采用scanf()进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格会结束

fgets
fgets(数组名,数组容量,stdin)

功能:

​ 从键盘录入一个字符串到字符数组,返回字符数组的地址

说明:

​ 采用fgets进行字符串输入,可获取所有输入的字符串,包括\n,在实际的字符串处理时,可能需要处理\n

/**
 *字符串的输入
 *语法:fgets(数组名,数组容量,sdtin);
 */
void test2()
{
    //创建一个char数组,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    fgets(name,sizeof(name)/sizeof(char),stdin);
    printf("您的姓名是%s\n",name);
}

注意:

  • 如果输入的字符串不包括空格换行,可以使用scanf()|fgets();
  • 如果输入的字符串包括空格换行,只能使用fgets();
字符串输出
printf
printf("%s",数组名);

例子

/**
 *字符串的输出
 *语法:printf("%s",数组名);
 */
void test3()
{
    //创建一个char数组,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    fgets(name,sizeof(name)/sizeof(char),stdin);
    //字符串输出
    printf("您的姓名是%s\n",name);
}
puts
puts(数组名)

功能:

​ 输出一个字符串

说明:

​ 字符串中可以包含转义字符

例子:

/**
 *字符串的输出
 *语法:puts(数组名);
 */
void test4()
{
    //创建一个char数组,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    fgets(name,sizeof(name)/sizeof(char),stdin);
    puts(name);  //无法进行拼接,只能输出
}
字符串拼接
strcat
strcat(数组名,"需要拼接的字符串")

引用:

#include <string.h>

例子:

/**
 *字符串的拼接
 *语法:strcat(目标字符串,"需要拼接的字符串");
 */
void test5()
{
    //创建一个char数组,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    fgets(name,sizeof(name)/sizeof(char),stdin);
    puts(strcat(name," 快跑!"));  //无法进行拼接,只能输出
}

注:

  • 目标字符串的长度必须足够大,以便于能容纳被链接的字符串

  • 链接后系统将自动取消目标字符串后面的结束符\0

  • 链接字符串可以是字符数组名,也可以是字符串常量

字符串拷贝
strcpy
strcpy(数组名,"字符串"),

引入:

#include <string.h>

说明:

​ 这个函数适合给字符串赋值用

例子:

/**
 *字符串的拷贝
 *语法:strcpy(目标字符串,"字符串");
 */
void test6()
{
    //创建一个char数组,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    fgets(name,sizeof(name)/sizeof(char),stdin);
    strcpy(name,"ZAQ");
    puts(strcat(name,"快跑!"));  //无法进行拼接,只能输出
}
字符串比较
strcmp
strcmp(字符串1,字符串2)

引入:

#include <string.h>

功能:

​ 比较两个字符串对应位置字符ASCII的大小(字典比较)。

返回值:

​ 若字符串1等于字符串2,则返回0

​ 若字符串1大于字符串2,则返回正数

​ 若字符串1小于字符串2,则返回负数

说明:

  • 执行这个函数时,自左到右逐个比较对应的ASCII的值,直到发现了不同字符或字符串结束符\0为止
  • 对字符串不能用数值型比较符
  • 字符串1与字符串2可以是字符数组名,也可以是字符串常量

例子

/**
 *字符串的比较
 *语法:strcmp(字符串1,字符串2);
 */
void test7()
{
    //创建一个char数组,用来存放人的名字
    char username[20],password[8];
    printf("请输入您的账户:\n");
    scanf("%s",username);
    printf("请输入您的密码:\n");
    scanf("%s",password);
    if(strcmp(username,"admin") && strcmp(password,"123456"))
    {
     	printf("登陆成功!\n");
    }
    else
    {
     	printf("账户或者密码错误!\n");
    }
}
获取字符串长度
strlen
strlen(字符串)

引用:

#include <string.h>

注:

返回字符串中包含的字符的实际个数,不含\0

例子

/**
 *字符串的长度
 *语法:strlen(字符串);
 */
void test8()
{
    //创建一个char数组,用来存放人的名字
    char username[20];
    printf("请输入您的账户:\n");
    scanf("%s",username);
    //获取字符串长度
    size_t len = strlen(username);
    if(!strcmp(username,"admin") 
    {
     	printf("账户输入成功!%lu\n",len);
    }
    else
    {
     	printf("账户输入错误!%lu\n",len);
    }
}

标签:字符,name,C语言,char,数组,printf,字符串
From: https://blog.csdn.net/Are_pro_bald/article/details/144542710

相关文章

  • C语言<2>
    1.if语句如果......则......,否则,则......;用if语句。形式:if(表达式1){语句1;}elseif(表达式2){语句2;}else{语句3;}[注]if、elseif、else三个语句后都没有;当if、elseif、else中仅有一个语句时{}可以省略。[例]有一个函数:当x<1时,y=x;当1<=......
  • C语言<1>
    1.固定格式#include<stdio.h>intmain(){return0;}[注]:以上内容都要以英文格式输入。2.printf语句功能:输出内容。形式:printf("");        [注]:1.全英文,引号内内容可以是中文、英文、符号。        2.可以是一个也可以是多个。[例]在屏幕上输......
  • 唯一ID(随机字符生成)API集成指南
    唯一ID(随机字符生成)API集成指南引言在当今数字化时代,唯一ID(随机字符生成)API的集成对于确保系统和应用的安全性、可靠性和高效性至关重要。无论是用户注册、数据加密、交易追踪还是其他需要生成唯一标识符的场景,一个强大且灵活的随机字符生成接口都能为开发者提供坚实的支持......
  • rust可以和C语言程序使用grpc进行通信吗? rust是客户端,C是服务端。 如果可以的话,举一个
    是的,Rust可以与C语言程序通过gRPC进行通信。gRPC是一个语言中立的通信框架,支持多种语言之间的互操作,包括Rust和C。关键步骤概述:定义gRPC接口(.proto文件):定义服务端和客户端之间的接口。C服务端实现:使用C语言实现服务端,处理客户端的请求。Rust客户端实现:使......
  • 【YashanDB知识库】如何处理yasql输入交互模式下单行字符总量超过限制4000字节
    现象在yasql执行sql语句后报错:YASQL-00021inputlineoverflow(>4000byteatline4)原因yasql在交互模式模式下单行字符总量限制4000字节,超出该限制即报错。交互式模式下,yasql会显示一个提示符,通常是SQL>,等待用户输入命令,用户执行的每个命令都会立即执行,并显示结果。......
  • Python字符串及正则表达式(十):字符串常用操作、字符串编码转换
    前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后,是程序经过精确计算、逻辑判断和数据整理的结果,它......
  • Python字符串及正则表达式(十):字符串常用操作、字符串编码转换
    前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后,是程序经过精确计算、逻辑判断和数据整理的结果,它们将复......
  • Linux文件属性 --- 文件.目录、软硬链接、字符设备文件
    目录 七种文件类型1、普通文件和目录 2、链接文件 2.1硬链接 2.2软链接  3、字符设备文件 七种文件类型 Linux的文件属性中一共有以下七种类型 :符号类型含义解释-普通文件纯文本文件(ASCII)和二进制文件(binary)d目录类似于Windows的文件夹l符号链接文件ln–......
  • c语言链表头插法再汇总
    建议回顾c链表一系列操作(主要是尾插法)c链表头插法遍历函数在这里先把尾插法的遍历函数稍作修改拿过来。voidForeach(NODE*h){if(NULL==h){return;}//辅助指针变量(帽子)NODE*pC=h;//这里改动是因为没有第一个空节点了......
  • c++领域展开第四幕——类和对象(上篇收尾 this指针、c++和c语言的初步对比)超详细!!!!
    文章目录前言一、this指针二、c++和c语言的初步对比总结前言上篇我们初步学习了类的基本概念以及实例化今天我们来学习类的构造以及析构还有类的默认成员函数,类和对象这一部分都会有点难跟着我一起来吧一、this指针Date类中有Init与Print两个成员函数,函......