黑马程序员——黑苹果的日记(5)——字符串
来源:互联网 发布:淘宝介入后卖家的影响 编辑:程序博客网 时间:2024/05/22 12:34
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----
一变量(部分)
1、改变整型变量所占存储空间
short 2字节 %hd
int 4字节 %d
long 8字节 %ld(32位下占4个字节)
2 改变整型变量的符号
signed 表示是有符号的(默认的就是有符号数)
unsigned 表示是一个无符号的数 (正数的取值范围会扩大一倍)
3char类型数据存储
3.1存储原理
char a='a' ----->取出'a'的ASCII码值,97,然后转换2进制,存储在一个字节中
1 ) 当把一个字符赋值给一个char类型变量,那么系统首先查这个字符所对应的ASCII码,然后把
这个ASCII值放到变量中
char c = 'a'; printf("%d\n",c);
2)根据变量中存储的ASCII值,去查ASCII表中对应字符,然后把这个字符打印控制台上,整形和 字符型可以互相转换。
printf("%c\n",c);
3.2不支持多个字符,多个字符是字符串
3.3 给num[2]的元素随机赋值,赋值范围
是0到21.
int num ;
num[2] = arc4random_uniform(21)+1;
二 字符串
1定义:在内存中以“\0”结束,在内存中,以'\0'结尾的字符数组。
2.C语言中没有字符串变量,可以用字符数组来存放字符串
3字符数组的初始化
1) 定义的同时进行初始化
char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'};char c4[10]={"abc"}; char c5[5]="ab";2) 先定义再初始化:
char c7[3]; c7[0] = 'a'; c7[1] = 'b'; c7[2] = 'c';
注意,未被定义的元素被自动初始化为0.
3.1字符数组的输入输出
使用的格式字符串为“%s”,表示输入、输出的是一个字符串
3.2字符串结束符
字符串总是以'\0'作为串的结束符
Char ch[10]="abc"
字符数组长度 10
字符串长度 4
可见字符串的长度 3
3.3不使用或者不当使用结束符造成的问题
1)字符数组初始化时没有使用 '\0'
char ch[]={'s','d','f'};printf("%s\n",ch);
会出现sdf后面的一系列数字。因为打印时在以'\0'为准。
char s[3]={'s','d','f'};
char s1[2]={'x','f'};
printf("s1[]= %s\n",s1);
打印结果为xfsdf234455433344\32232\44423_等。
因为打印时没有寻找到'\0'
char str1[]="hello";char str3[3]={'a','b','c'};char str2[2]={'x','y'};printf(" %s\n",str2);
结果为xyabchello
因为系统在"hello"时找到了‘\0’的标记。
4字符串长度计算方法
1、使用字符串处理函数
char newStr[19]="welcome to heima!";int len = strlen(newStr);printf("%d\n",len);
得到的值为17,分析:计算字符串的长度时,不包含'\0'
2、以“\0”为字符串结束条件进行统计。
1)不知道数组长度的时候,计算字符串的长度
char ch[]= "asfn";int i=1;while (ch[i-1]!='\0'){ i++;}printf("长度为%d\n",i);结果为5
2)已知数组长度,但是不知道数组中实际存放了多少个字符
char ch[100]= "asfn";int i=1;while (ch[i-1]!='\0'){ i++;}printf("长度为%d\n",i);或者char ch[100]="asfn";int i=1;for(;ch[i-1]!='\0';i++){ }printf("%d\n",i );或者char ch[100]="asfn";int i=1;for(;;){ if(ch[i-1]!='\0'){ i++; }else{ break; }}printf("%d\n",i );判断字符串中是否包含某个字符,如果包含,返回其首次出现的 位置,否则返回-1
char func (){ for(;ch[i-1]!='\0';i++){ if (str[i]=='g') { return i; }else{ return -1; } } }int main(){char str[]="qsdefrgggghhtthhgffrthddssffb";func(str); return 0;}5字符数组和普通数组区别
注意数组类型的含义:
数据类型指的是数组所包含的元素的类型,而不是数组名的类型,
数组名永远是一个指针,指向第一个元素的地址,即数组首地址
6字符串处理函数
6.1字符串输出函数 puts
格式: puts(字符数组名)
功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串。
char ch[]="qsdefrgggghhtthhgffrthddssffb";puts(ch);return 0;}此时会自动的输出qsdefrgggghhtthhgffrthddssffb
6.2字符串输入函数 gets
格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。
功能:从标准输入设备键盘上输入一个字符串。
char ch[30];gets(ch);puts(ch);
此时的运行结果会是你输入一组字符串,然后他就打印出来
当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字 符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。
6.3字符串连接函数 strcat
格式: strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “\0”。本函数返回值是字符数组1的首地址
<pre name="code" class="objc">char astr[44]="welcome to ";char bstr[56];gets(bstr);strcat(astr,bstr);puts(astr);return 0;}此时输出结果为
welcome to heima
6.4字符串拷贝函数strcpy
格式: strcpy(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
这时候2中的字符串来替代了1中的字符串。只输出2的结果。
6.5字符串比较函数strcmp
格式: strcmp(字符数组名1,字符数组名2)
功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0。
char astr[44]="welcome to heima";char bstr[56];gets(bstr);if (strcmp(astr,batr)>0){ printf("a big ");}else if(strcmp(astr,batr)<0){ printf("b big ");}else{ printf(" a== b");}6.6测字符串长度函数strlen
格式: strlen(字符数组名)
功能:测字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值。
char a[21]="welcome to heima ";int len = strlen(a); printf("%d",len);
练习题:使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词?(有可能面试题)
int main(int argc, const char * argv[]) { char aStr[999]; //接收字符串保存到数组中 gets(aStr); int word = 0; int count=0; //for循环遍历 for (int i=0; aStr[i]!='\0'; i++) { if (aStr[i]==' ') { word = 0; }else if (word==0){ //把单词首字母大写 aStr[i] = aStr[i]-32; count++; word = 1; } } printf("单词个数为:%d\n",count); printf("%s\n",aStr); return 0;}
- 黑马程序员——黑苹果的日记(5)——字符串
- 黑马程序员——黑苹果的日记(4)——基础知识(2)
- 黑马程序员——黑苹果的日记(3)——函数和进制
- 黑马程序员——黑苹果的日记(6)——Foundation之NSString
- 黑马程序员——黑苹果的日记(7)——Foundation(2)
- 黑马程序员——黑苹果的日记(11)—— oc加强
- 黑马程序员——黑苹果的日记(1) — 一维数组
- 黑马程序员——黑苹果的日记(2)—基础知识总结(1)
- 黑马程序员——黑苹果的日记(8)——oc基础之类和对象
- 黑马程序员——黑苹果的视频笔记(10)——字符串混合指针和结构体基本概念
- 黑马程序员——黑苹果的视频笔记(9)——指针(C语言)
- 黑马程序员java学习日记——字符串String
- 黑马程序员——学习日记13 java字符串String
- 黑马程序员—日记说明
- 黑马程序员——学习日记5
- 黑马程序员——java基础学习日记(5)
- 黑马程序员—字符串
- 黑马程序员—字符串
- POJ 1753 Flip Game(类似与N皇后问题的DFS)
- 静态内存,栈内存和动态分配的内存(堆内存)的区别
- 4sum leetcode (18)
- SQL-SQL基础
- 黑马程序员——IO(概述、FileWriter、FileReader)
- 黑马程序员——黑苹果的日记(5)——字符串
- hdoj-2544 最短路【最短路径--dijkstra&&spfa&&floyd】
- Android源码分析之Handler机制
- 用redis实现支持优先级的消息队列
- Andriod studio中出现Connection reselt问题以及gradle问题
- 《The Swift Programming Language》原版中的问题汇总
- Open drain & push pull 原理
- Android Studio一些简单设置
- [转]VC++操作Word