《黑马程序员》 字符串 (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为字符串的结束标志
#include <stdio.h> int main() { char name[] ="it"; char name2[] ={'o','k'}; printf("%s\n",name2); return 0; }
运行结果:okit
数据内存如下所示
strlen函数
作用:用来计算字符串的长度,strlen函数声明在<string.h>文件中,计算的是字符数并不是字数,计算的字符不包括尾部的"\0"
#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:
#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:
#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
#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; }