黑马程序员------C语言基础 字符串

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

                   字符串

     1 字符串的概念

     字符串是位于双引号的字符序列,在内存中以'\0'结束所占字节比实际多一个。

      1>c语言中没有字符串变量,可以用字符数组来存放字符串

      2>可以吧一个字符常量赋值给一个字符变量,单不能把字符串赋值给字符变量

     2 字符数组的定义

        形式与数组数组相同

     1>一维字符串数组

     char 数组名[常量表达式]

      char a[5]

     char a[5+3]

     int len ;

     char a[len]

     也可以使用宏定义 # define M  2 

          char aM;

     2> 二维字符串数组

     char a[2][3];

     

    3 字符数组的初始化

          1>定义数组的同时进行初始化

                char a[5]={'a','b','c','e','f'};

                char a[] = {'a','b','c','e','f'};

                char a[3]={'a'};// a\0\0

                char a[5]={[3]='b'};

        2>先定义后初始化

      char ch3;

       ch0]=‘d;

       ch[1]='c';

    4>字符数组的遍历

        char n;

      for (int i =0;i<n;i++){

        printf("%c\t",ch[i]);

     }

    4字符数组涌来保存字符串的

            字符数组作用

            1)保存字符串  char str10]={"halloworld"};

            2)保存字符

     字数组保存字符串,

        第一种初始化方法

       char str4]={"abc"};

        str[0]='a';str[1]='b';str[2]='c';str[c]='\0'

     第二种初始化方法 

     char str2[4]="abc"; 这里直接包含\0 所以数组的长度是4

     

          字符串的输出与输入

      把一个字符数组,用%s输出

      char ch[10]={'a','b','c','d','\0'}

     用%s接收一个字符串

        char str];

     5 %s的形式输入和输出字符串

     使用%s表示的输入/输出的是一个字符串。

     %c 我门要查看的是一个字符串,每次打印的事一个字符。

       char str[10]="hahais"

     for(int i=0;i<10;i++){

        printf("%c",str[i]);

     }

     

     用%s从给定地址开始,输出字符直到遇到\0结束 这样可以用prinfscanf一次输入一个字符串。

    把一个数组用%s输出

     char str[3]={'a','b','\0'};

     printf("%s",str);

    从键盘上输入一个字符串

     char str1[10];

     scanf("%s",str1);

    注意点:

     1》用%s格式进行输出的话,注意空格问题

      如果输入的字符串友空格,课空格无法被接受收保存

     以%s的格式输入,scanf遇到了空格,就结束了

     2》输入的字符串的长度要小于数组的长度

     

     6字符串结束的使用

        char a[]={'a','b','c','d','\0'};

        char b[]={'x','y'};

     printf(%s,b);//这里 答应出来的事xyabcd,就是应为没有加\0

     在初始化对方法下后面要手动加‘\0’否则会出现乱码或者不是我们想要的

     7.字符串长度的计算

        1》使用字符串函数 strlen(str);

     

        2》以'\0'作为条件,进行判断遇,遇到\0就结束

     不知道数组的长度下计算字符串长度

     //不指定字符串长度的初始化(要循环的次数),所以可以使用while

     char ch[]="acd";

     int i=1;

     while(ch[i-1]='\0'){

        i++;

     }

     

    printf("长度:%d\n",i);

     

     判断字符串中是否包含某个字符 如果包含 返回首次出现的位置。否则

     返回-1.

     8 字符数组

     字符数组实际上和普通数组没有什么区别

     数组类型的含义:数据类型的事数组所包含的元素都是类型,而不是数组名的类型数组名永远是一个指针,指向第一个元素到之地,即数组地址

     9.字符串处理函数

     1》字符串输出函数puts  头文件stdio.h

        1.puts函数可以自动换行

     2.也可以不是数组的首地址,可以是元素地址

     3.必须是字符数组

     4不可以格式化输出

     puts(str);

     

     2》字符串输入函数gets 头文件stdio.h

        使用gets会给出一个警告

     1warning this program uses gets() ,which is unsafe.

     2)不安全:数组长度是100,但如果你输入了120个字符,会存在越界问题

     3)使用gets可以接受空格

     

     3》字符串链接函数strcat(); 使用时的头文件string.h

        链接一个字符串,把两个字符串链接成一个字符串

            oldstr newstr,两个字符串

     1strcat(oldstr,newstr); nwestroldstr的最后一个字符\0覆盖了拼接到oldstr。后面

     2oldstr的长度有足够,能确保保存oldnewstr

     

     4》字符串拷贝函数:strcpy 引入头文件string.h

     strcpy(oldstr,newstr);

      把newstr拷贝到oldstr中,newstr会覆盖掉oldstr

     5strcmp 比较两个字符串大小

     abc

     def 大 规则:比较字符的aascii码值,比较字啊字典中出现的顺序

       比较过程,逐个取两个字符串的字符对应位相比较,从第一位不同的开始,就能确定字符串大小

     strcmp(str1,str2) 函数有返回值  >0 str1>str2

                                    <0  str1 < str2

                                    ==0  str1 = str2

 练习计算单词个数 ,同时让首字母大写
     #include <stdio.h>
     
     int main(int argc, const char * argv[]) {
     char ch[100];//定义一个变量存储字符串
     printf("请输入一个字符串\n");
     gets(ch);
     int word=0;
     int count=0;
     //循环取出每个字节,遇到\0循环结束
     for(int i=0;ch[i]!='\0';i++){
     if (ch[i] == ' ') {
     //是否是单词标记下
     word = 0;
     }else if(word == 0){
     //当前循环 字符是空格 下一次循环一定是单词
     count++;
     word =1;// 让单词标志变为不是单词
     ch[i]=ch[1]-32;
     
     }
     
     }
     printf("%s\n",ch);
     printf("单词的个数是%d",count);
     
     
     return 0;
     }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值