C语言数组、字符与字符串笔记
数组/字符/字符串
- 数组
- 一维数组的定义
- 一维数组的初始化
- 字符串
- 字符数组
- 字符数组的初始化
- 1.使用字符常量的初始化列表对数组初始化
- 2.使用字符串常量直接对数组初始化
- 字符指针
- 指针
- 字符指针与字符串
- 字符的输入和输出
- 字符的输入
- 字符的输出
- 字符串的输入和输出
- 字符串的输入
- scanf()函数
- gets()函数
- 字符串的输出
数组
一维数组的定义
变量定义:为变量分配空间,还可以为变量指定初始值(即初始化)。
//方法 1
int a[3]={1,2,3};
//方法 2
int a[]={1,2,3};
//方法 3
int a[3]={0}; //全是0的数组
//方法 4
int a[4]={1,2};//后面没有的数自动补0,该数组内容为1,2,0,0,如果是字符数组则自动补'\0'空字符
另外,数组大小最好用宏定义,以便日后修改代码。
一维数组的初始化
初始化就是给数组赋值,一般在定义数组的时候完成。
未初始化的数组元素值:
- 静态数组和全局数组自动初始化为 0 。(静态数组只需在数据类型int之前加static,全局数组只需在main()函数之外定义数组即可,可以自己试一下)
- 其他数组初始化为随机数。
举例如下:
int a[3];
for (int i=0;i<3;i++)
{printf("%d\n",a[i]);
}
输出:
12325808
0
16
字符串
C语言字符串特性:字符串以空字符结尾,空字符被写作\0
,其ASCLL为0,用来标记字符串的结尾。
C语言没有提供专门的字符串数据类型。
表示及处理字符串方法:
- 1.使用字符数组并且数组最后一个元素是
'\0'
空字符。(注意末尾没有’\0’的字符数组不能代表字符串) - 2.使用字符指针。
字符数组
定义:每个元素都是字符类型的数组。
未初始化的字符数组,不论是静态数组还是动态数组,都自动初始化一个'\0'
空字符。
字符数组未初始化举例:
int main(void)
{int i=0;char str[4]; //未初始化for (;i<4;i++){printf("%c",str[i]);printf("1");}return 0;
}
输出:
1 1 1 1
字符数组的初始化
1.使用字符常量的初始化列表对数组初始化
char str[6]={'s','a','b','e','r','\0'};
如果初始化时元素个数小于数组大小,则自动在每个位置补’\0’空字符
2.使用字符串常量直接对数组初始化
//方法1
char str[6]={"saber"};
//方法2
char str[6]="saber";
//方法3
char str[]="saber";
另外,数组名表示数组的首地址,即数组第一个元素的地址。且数组名是一个地址常量,不能改。
如:str="saber"是错误的,str是地址常量,值为s字符的地址。
字符指针
指针
使用*
表示指针类型。
指针表示数据的地址。
定义指针变量:
int *pa; //未初始化
上述定义就是告诉编译器,pa是一个指针变量,需要用一个int型变量的地址给它赋值。
定义指针可以不用初始化,但是使用指针一定要初始化。
如果不知道指针指向哪来,那就指向NULL(即空指针,推荐这样对其初始化),之后要使用该指针之前还需对其赋值。
int *pa=NULL;
字符指针与字符串
字符指针就是指向字符串首地址的指针,也就是字符串第一个字符的地址。
char *pStr="saber";
注意:此处可以改变指针pStr的值(也就是指向),但是不能改变指向的内容也就是字符串,因为字符串是一个常量
要想既能改变指针的指向,也能改变指针的值,下面有一种字符指针与指针数组结合的方法:
char str[]="saber";
char *pStr;
pStr=str; //等价于pStr=&str[0]
*pStr='w';//修改字符串第一个字符,等价于str[0]='w'和 pStr[0]='w'
字符的输入和输出
最常用的方法都有两个。
字符的输入
char ch;
//方法 1
ch=getchar(); //只用于输入字符
//方法 2
scanf("%c",&ch);
字符的输出
char ch;
//方法1
putchar(ch) //只用于输出字符
//方法2
printf("%c",ch);
字符串的输入和输出
字符串的输入
有两种方法:
char str[10];
//方法1
scanf("%s",str); //不推荐使用
//方法2
gets(str); //推荐使用
还有一种比较笨的方法,就是遍历字符数组,逐个位置输入字符。
scanf()函数
以空白符(空格,回车等)为输入的停止标志,不能输入带空格的字符串。
而且不能读走空白符,影响后面的输入。这是scanf()函数十分严重的弊端。
不推荐使用这种方法输入字符串。
下面的代码就是由于空白符还留在缓冲区的影响:
#include <stdio.h>
int main(void)
{char c[80];printf("input a string:"); //用户输入一个字符串scanf("%s",c);printf("%s\n",c);printf("input a string:"); //用户输入一个字符gets(c);printf("%s\n",c);return 0;
}
shelll输出:
input a string:saber
saber
input a string:请按任意键继续. . .
ch把scanf()函数的输入停止标志的空白符(此处为回车)读取了。
解决办法有两个:
- 在scanf()输入之后加一行
getchar();
用来接收缓冲区的空白符。 - 在scanf()输入之后加一行
fflush(stdin);
清空输入缓冲区。
gets()函数
以回车为输入的停止标志,也就是可以输入带空格的字符串,
并且可以读走缓冲区的回车,只能输入字符串.
推荐使用这种方法输入字符串。
下面是gets()函数读走了回车不影响后续输入的代码:
#include <stdio.h>
int main(void)
{char c[80],ch;printf("input a string:");//用户输入一个字符串gets(c);printf("%s\n",c);printf("input a string:");//用户输入一个字符ch=getchar();printf("%c\n",ch);return 0;
}
输出:
input a string:saber
saber
input a string:
等待用户输入ch字符中。
字符串的输出
char str[10];
//方法1
printf("%s",str); //或者直接用字符串替换str
//方法2
puts(str); //自动换行,只能输入字符串
还有一种比较笨的方法,就是遍历字符数组,逐个位置输出字符。
本文参考了苏小红C程序设计PPT。
C语言数组、字符与字符串笔记相关推荐
- C语言中字符型和字符串型的对比
C语言中字符型和字符串型的对比 字符型: C语言中字符用单引号括起来,存储方式以ASCII编码二进制形式存储,占用一个字节 如:'a','b','c','A'等 注意:在C语言 ...
- C语言输出字符,字符串的ASCII码的16进制数
C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...
- c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)
C语言输入字符和字符串(所有函数大汇总) C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar() ...
- 数据结构C语言数组字符数组
C语言中,没有字符串类型.用字符数组来模仿字符串类型. 上代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int ...
- C语言输入字符和字符串
在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个函数都 ...
- c语言实现字符指针(字符串)数组的排序
需求: "ff555d", "114ddd", "114dd","aaa", "aaab", &qu ...
- 【c语言】字符及字符串
1.字符串和字符基础 字符是构成源程序的基本单位,在源程序中,当一个字符被认为是一个字符常量.字符常量实际是一个整数,对应其ASCLL码中的值. 字符串是用一对双撇号引起来的,做为一整 ...
- c语言数组字符比大小,C语言strncmp函数
C语言strncmp函数教程 在 strncmp 函数与 strcmp 函数的区别就是,strncmp 函数可以选择比较前 n 个 strncmp函数详解 语法 int strncmp(const c ...
- C#编程-39:字符和字符串笔记
1.字符char char.IsLetter('a') char.IsDigit('1') char.IsLetterOrDigit('1') char.IsLower('a') char.IsUpp ...
最新文章
- python趣味编程:歌星大奖赛
- python全栈脱产第25天------组合、多态、封装、property装饰器
- 显示电池电量的小工具
- 【Linux】【服务器】 CentOS7下安装Redis详细过程步骤
- R语言:常用函数总结
- 9.为包含指针的关联容器指定比较类型
- 使用WebRTC开发Android Messenger:第2部分
- ThinkPHP 基础
- 三星笔记本电脑怎么恢复出厂设置_Mac OS如何恢复出厂设置?安装Mac OS系统教程...
- redhat7 配置xmanager登陆
- linux设备树详解-韦东山-专题视频课程
- java %2c_java2c工具(修复)
- 电脑窗口切换常用的快捷键有哪些
- win10 +cude9.2+相匹配的cudnn+相匹配的tensorflow+ssd学习之路(问题百出2)
- 移动机器人定位方法概述
- 龙芯电脑上配置LAMP环境
- Struggling
- OPPO系统推送SDK集成踩坑思路
- QT之QTableWidget控件
- noip2015day1