《黑马程序员》 字符串 (C语言)
字符串的基本使用
定义方法:
char name[10] ="jack"; 此时字符串中共包含‘j’,’a‘,'c','k','\0'
中括号中的10代表该字符串最多存放10个字符
字符串的输出
1.printf("jack");
2.printf(name); //把数组传入printf语句输出会出现警告
这两种方法输出结果相同,但printf语句默认情况下只认字符串常量,所以第二种方法在编译时会出现警告。
字符串的存储细节:
数组name中共占用8个字节,含有三个元素分别为'i','t','\0'
char name[8] ="it";
char name2[8] = {'i','t','\0'};
char name3[8] = {'i','t',0};
三种写法效果相同
注:因’\0‘的ASCII值为0,故’\0‘与0等价
修改数组内元素的值
name[1] = 'q'; //把数组内第2个元素的值改为q;
\0的作用
\0为字符串的结束标志
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { char name[] = "it" ; char name2[] ={ 'o' , 'k' }; printf ( "%s\n" ,name2); return 0; } <br>运行结果:okit |
数据内存如下所示
strlen函数
作用:用来计算字符串的长度,strlen函数声明在<string.h>文件中,计算的是字符数并不是字数,计算的字符不包括尾部的"\0"
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> #include <string.h> int main() { char name[] = "haha" ; //定义一个字符串数组 int size1 = strlen (name); //计算字符串的长度 不包含"\0" int size2 = sizeof (name); //计算字符串的占用字节数,包含"\0" printf ( "%d\t%d\n" ,size1,size2); //输出 return 0; } 运行结果:4 5 |
代码练习1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include<stdio.h> //字符串数组 int main() { //一维数组 char name[] = "haha" ; char name1[] = "rose" ; char name2[] = "jim" ; char name3[] = "jake" ; //二维数组 //第一种方法 char name[2][10] = { "jake" , "rose" }; //第二种方法 char name[2][10] = { { 'j' , 'a' , 'k' , 'e' , '\0' }; { 'r' , 'o' , 's' , 'e' , '\0' }; }; return 0; } |
代码练习2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> #include <string.h> /*编写一个函数char_contains(char str[],char c),如果字符串中str中包含字符C, 则返回数值1,否则返回数值0. */ int char_contains( char str[], char c) { int i; //遍历数组内所有元素,检测数组内是否包含字符C for (i = 0;i < strlen (str);i++){ if (str[i] ==c){ //返回数值1 return 1; } } return 0; } int main() { char str[]= "itcast" ; int result = char_contains(str, 'c' ); printf ( "%d\n" ,result); return 0; } |
代码练习3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> #include <string.h> int main() { int i; char str[] = "cha zhao zui chang de zifuchuan danci " ; int maxCount = 0; // 记录最长单词的长度 int GB = 0; // 记录单词尾字符下标 for (i = 0; i < strlen (str); ++i) { int count = 0; // 记录新单词长度 while (str[i] != ' ' && str[i]) { // 字符不是空格也不是\0的时候开始记录单词长度 ++i; ++count; } if (count > maxCount) { //此段if语句的最用是更新最长单词的长度 maxCount = count; GB = i - 1; } } printf ( "最长单词是:" ); for (i = GB - maxCount + 1; i <= GB; ++i){ printf ( "%c" , str[i]); //输出最长单词 } printf ( "\n" ); //换行 return 0; } |
分类:
01-C语言
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目