黑马程序员——黑苹果的日记(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;}








































0 0
原创粉丝点击