数组/字符/字符串

  • 数组
    • 一维数组的定义
    • 一维数组的初始化
  • 字符串
    • 字符数组
      • 字符数组的初始化
        • 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语言数组、字符与字符串笔记相关推荐

  1. C语言中字符型和字符串型的对比

    C语言中字符型和字符串型的对比 字符型:     C语言中字符用单引号括起来,存储方式以ASCII编码二进制形式存储,占用一个字节     如:'a','b','c','A'等     注意:在C语言 ...

  2. C语言输出字符,字符串的ASCII码的16进制数

    C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...

  3. c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)

    C语言输入字符和字符串(所有函数大汇总) C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar() ...

  4. 数据结构C语言数组字符数组

    C语言中,没有字符串类型.用字符数组来模仿字符串类型. 上代码:  1 #include <stdio.h>  2 #include <stdlib.h>  3   4 int ...

  5. C语言输入字符和字符串

    在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个函数都 ...

  6. c语言实现字符指针(字符串)数组的排序

    需求: "ff555d", "114ddd", "114dd","aaa", "aaab", &qu ...

  7. 【c语言】字符及字符串

    1.字符串和字符基础     字符是构成源程序的基本单位,在源程序中,当一个字符被认为是一个字符常量.字符常量实际是一个整数,对应其ASCLL码中的值.     字符串是用一对双撇号引起来的,做为一整 ...

  8. c语言数组字符比大小,C语言strncmp函数

    C语言strncmp函数教程 在 strncmp 函数与 strcmp 函数的区别就是,strncmp 函数可以选择比较前 n 个 strncmp函数详解 语法 int strncmp(const c ...

  9. C#编程-39:字符和字符串笔记

    1.字符char char.IsLetter('a') char.IsDigit('1') char.IsLetterOrDigit('1') char.IsLower('a') char.IsUpp ...

最新文章

  1. python趣味编程:歌星大奖赛
  2. python全栈脱产第25天------组合、多态、封装、property装饰器
  3. 显示电池电量的小工具
  4. 【Linux】【服务器】 CentOS7下安装Redis详细过程步骤
  5. R语言:常用函数总结
  6. 9.为包含指针的关联容器指定比较类型
  7. 使用WebRTC开发Android Messenger:第2部分
  8. ThinkPHP 基础
  9. 三星笔记本电脑怎么恢复出厂设置_Mac OS如何恢复出厂设置?安装Mac OS系统教程...
  10. redhat7 配置xmanager登陆
  11. linux设备树详解-韦东山-专题视频课程
  12. java %2c_java2c工具(修复)
  13. 电脑窗口切换常用的快捷键有哪些
  14. win10 +cude9.2+相匹配的cudnn+相匹配的tensorflow+ssd学习之路(问题百出2)
  15. 移动机器人定位方法概述
  16. 龙芯电脑上配置LAMP环境
  17. Struggling
  18. OPPO系统推送SDK集成踩坑思路
  19. QT之QTableWidget控件
  20. noip2015day1

热门文章

  1. java 编写代码_如果您在2015年编写过Java代码-这是您不容错过的趋势
  2. openshift_在OpenShift上扩展Java EE微服务
  3. 通过TLS发送的Java邮件
  4. JUnit 5中的测试执行顺序
  5. 编译hotspot_从Hotspot JIT编译器打印生成的汇编代码
  6. 线程同步,线程不同步_重新同步多线程集成测试
  7. Java命令行界面(第19部分):jClap
  8. JavaFX实际应用程序:SkedPal
  9. 使用一些可选的将字符串配置属性转换为其他类型
  10. 用Cucumber JVM编写BDD测试