c语言程序设计字符组,C语言程序设计入门:字符串

本文详细介绍了C语言中的字符串概念,包括字符数组、字符串常量、字符串运算及其注意事项。强调了字符串以0结尾的特性,以及在使用指针处理字符串时的潜在风险。还讨论了字符串赋值、输入输出以及安全的输入方法。此外,提到了字符串数组和指针的区别,并通过示例展示了如何使用switch语句处理不同情况。
摘要由CSDN通过智能技术生成

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我们立即下架或删除。

简介:字符串

字符数组

• char word[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘!’};

word[0] H

word[1] e

word[2] l

word[3] l

word[4] o

word[5] !

这不是 C语⾔的字符串,因为不能⽤字符串的⽅式做计算

字符串

• char word[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘!’,’\0’};

word[0] H

word[1] e

word[2] l

word[3] l

word[4] o

word[5] !

word[6] \0

字符串

• 以 0(整数 0)结尾的⼀串字符

• 0或 ’\0’是⼀样的,但是和 ’0’不同

• 0标志字符串的结束,但它不是字符串的⼀部分

• 计算字符串⻓度的时候不包含这个 0

• 字符串以数组的形式存在,以数组或指针的形式访问

• 更多的是以指针的形式

• string.h ⾥有很多处理字符串的函数

字符串变量

• char *str = “Hello”;

• char word[] = “Hello”;

• char line[10] = “Hello”;

字符串常量

• “Hello”

• ″Hello″ 会被编译器变成⼀个字符数组放在某处,这

个数组的⻓度是 6,结尾还有表⽰结束的 0

• 两个相邻的字符串常量会被⾃动连接起来

• ⾏末的 \表⽰下⼀⾏还是这个字符串常量

字符串

• C语⾔的字符串是以字符数组的形态存在的

• 不能⽤运算符对字符串做运算

• 通过数组的⽅式可以遍历字符串

• 唯⼀特殊的地⽅是字符串字⾯量可以⽤来初始化字符

数组

• 以及标准库提供了⼀系列字符串函数

字符串常量

char* s = "Hello, world!";

• s 是⼀个指针,初始化为指向⼀个字符串常量

• 由于这个常量所在的地⽅,所以实际上 s是 const

char* s ,但是由于历史的原因,编译器接受不带

const的写法

• 但是试图对 s所指的字符串做写⼊会导致严重的后果

• 如 果需要修改字符串,应该⽤数组:

char s[] = "Hello, world!";

指针还是数组?

• char *str = “Hello”;

• char word[] = “Hello”;

• 数组:这个字符串在这⾥

• 作为本地变量空间⾃动被回收

• 指针:这个字符串不知道在哪⾥

• 处理参数

• 动态分配空间

• 如果要构造⼀个字符串 —>数组

• 如果要处理⼀个字符串 —>指针

char*是字符串?

• 字符串可以表达为 char*的形式

• char*不⼀定是字符串

• 本意是指向字符的指针,可能指向的是字符

的数组(就像 int*⼀样)

• 只有它所指的字符数组有结尾的 0,才能说它

所指的是字符串

字符串运算

字符串赋值?

• char *t = “title”;

• char *s;

• s = t;

• 并没有产⽣新的字符串,只是让指针 s指向了 t

所指的字符串,对 s的任何操作就是对 t做的

字符串输⼊ 输出

• char string[8];

• scanf(“%s”, string);

• printf(“%s”, string);

• scanf读⼊⼀个单词(到空格、 tab或回⻋为⽌)

• scanf是不安全的,因为不知道要读⼊的内容的⻓度

安全的输⼊

• char string[8];

• scanf(“%7s”, string);

• 在 %和 s之间的数字表⽰最多允许读⼊的字符的数

量,这个数字应该⽐数组的⼤⼩⼩⼀

• 下⼀次 scanf从哪⾥开始?

常⻅错误

• char *string;

• scanf(“%s”, string);

• 以为 char*是字符串类型,定义了⼀个字符串类型的

变量 string就可以直接使⽤了

• 由于没有对 string初始化为 0,所以不⼀定每次运⾏

都出错

空字符串

• char buffer[100]=””;

• 这是⼀个空的字符串, buffer[0] == ‘\0’

• char buffer[] = “”;

• 这个数组的⻓度只有 1!

字符串数组

• char **a

• a是⼀个指针,指向另⼀个指针,那个指针指向⼀个字符(串)

• char a[][]

• a是⼀个⼆维数组,第⼆个维度的⼤⼩不知道,不能编译

• char a[][10]

• a是⼀个⼆维数组, a[x]是⼀个 char[10]

• char *a[]

• a是⼀个⼀维数组, a[x]是⼀个 char*

printf("请输⼊⽉份: ");

int month;

scanf("%d", &month);

switch ( month ) {

case 1: printf("January\n"); break;

case 2: printf("February\n"); break;

case 3: printf("March\n"); break;

case 4: printf("April\n"); break;

case 5: printf("May\n"); break;

case 6: printf("June\n"); break;

case 7: printf("July\n"); break;

case 8: printf("August\n"); break;

case 9: printf("September\n"); break;

case 10:printf("October\n"); break;

case 11:printf("November\n"); break;

case 12:printf("December\n"); break;

}

今后可以⽤数组来做

程序参数

• int main(int argc, char const *argv[])

• argv[0]是命令本⾝

• 当使⽤ Unix的符号链接时,反映符号链接的名字 更多>>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值