A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wxh794708907 中级黑马   /  2015-7-22 20:01  /  467 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.用%s输出一个字符串
    从给定的地址开始,一直输出字符,直到遇到\0就停止了
        printf("%s\n",str);  输出的是地址;
   
        printf("%s\n",&str[0]);
   
    printf("%s\n",&str[3]);
   
    //把一个字符数组,用%s进行输出
    char ch[10]={'a','b','c','d','\0'};
    printf("%s\n",ch);
   
2、%s接收键盘上输入的一个字符串
    char str3[10];
      从键盘上接收一个字符串,保存在以str为首地址的字符数组中
    scanf("%s",str3);
   
    printf("%s\n",str3);  //把字符数组,以%s的格式输出
   
    注意点:
      1、 如果以%s格式进行输入的话,注意空格问题
         如果输入的字符串有空格,则空格之后的字符无法被接收保存
         (  以%s的格式输入,scanf遇到了空格,就结束了)
   
      2、输入的字符串的长度要小于数组的长度

  
定义了一个字符串  abc
char str[]="abc";
实际上存储了
str[0] a
str[1] b
str[2] c
str[3] \0
printf("%ld\n",sizeof(str));结果是4 证明有四个字符
存的是字符,可以以%s输出
char ch[]={‘a’,’c’\0};
char ch1[]={‘x’,’y’,’z’};
printf("%s\n",ch1);  这里输出的结果会是 xyzac 因为ch1字符串数组没有\0结束 而内存分配是连续的 ch1是后分配所以分配的是低地址 而ch是高地址 所以结果就是在xyz后面显示了

字符串的长度:
当没有以\0作为结束时,字符串长度==sizeof(数组名);

字符串函数的使用

      使用puts和gets 必须包含头文件 stdio.h

      puts()    输出一个字符串


      原来输出字符串的方法
      char str[]="abc";
      printf("%s\n",str);

      puts(字符数组名);


      gets()    输入一个字符串


      原来接收一个字符串

      char str1[100];
      scanf("%s",str1);  //缺陷,输入字符串的时候不能有空格

      gets(数组名);

      需要包含 string.h的头文件
      strcat()  连接一个字符串,把两个字符串连接成一个字符串
                A B两个字符串
      strcat(A,B)  把字符串B连接到A的后面去

定义一个字符数组:
char str[]="abc";
    printf("%s\n",str);
   
    puts(字符数组地址);
    1)puts函数可以自动换行吗
    2)也可以不是数组的首地址,可以是元素的地址
    3)必须是字符数组
    4) 不可以格式化输出
    puts(str);表示输出str这个数组内的字符串

   
    char str1[10];
    使用gets会给出一个警告
    1)warning: this program uses gets(), which is unsafe.
    2)不安全:数组长度是100,但是如果你输入了120个字符,存在越界问题
    3)使用gets可以接收空格
   
    字符串的函数
    strcat 函数介绍,使用该函数必须要引入头文件
    1)格式:strcat(oldStr,newStr);将newStr加到oldStr后面;
    2) oldStr的长度要足够大,只要能够保存下oldStr+newStr
    3) newStr 把oldStr的最后一个字符\0给覆盖了

  strcpy  字符串拷贝函数

    strcpy(oldStr,newStr);
    把newStr拷贝到oldStr中,newStr会覆盖掉oldStr中的内容

    strcmp  字符串的比较函数
    strcmp(str1,str2);  //比较两个字符串的大小
    //abc
    //def  大     规则:比较字符的ascii码值   比较在字典中出现的顺序

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

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

返回值的具体大小是两个数组比较相差的ASCII碼值的大小;
    strlen  字符串的长度计算函数
例如 strlen (str1);

注意事项:
int main(int argc, const char * argv[]) {
   
    char str1[100]="aaaaaa";
    char str2[]="bangzhang";
    puts(str1);
    //字符串的拷贝
    //str1要足够大,否则可能会越界
    //strcpy(str1, str2);
    //str2 拷贝到str1中  str2压在了str1上
    puts(str1);
    puts(str2);
   
    //strcmp 比较两个字符串的大小
    int s = strcmp(str1, str2);
   
   
    //strlen计算字符串的长度
    //strlen不含\0
    s = strlen(str1);
   
    printf("s = %d\n",s);
    return 0;
}

应用:单词首字母大写&统计单词个数
#include <stdio.h>
int main(int argc, const char * argv[]) {
   //定义变量
    char str[100];
    int isWord = 0;
    int count = 0; //统计单词的个数
    //提示用户输入字符串
    printf("请输入一个字符串:\n");
    //接收字符串,并保存到数组中
    gets(str);
    //循环取出每一个字符  遇到\0 循环结束
    for (int i=0; str!='\0'; i++) {
        
        //判断
        if (str==' ') {
            //把是否是单词标记改一下
            isWord = 0;  //这是一个标记,words=0表示是一个单词
        }else if(isWord == 0){
             //    当前循环 字符是空格 下次循环一定是一个单词
            count++;
            str = str-32; //减去32就大写了
            isWord = 1; // 让单词标志变为不是单词
        }
        
    }
    printf("单词个数:%d,字符串:%s\n",count,str);
   
    return 0;
}

   1、指针变量

        用来存放地址的变量,就是指针变量

   2、指针?

        就是地址

   3、指针变量的定义


        数据类型  *指针变量名;


      int *p;   //定义了一个指针变量,变量名是p
                //int表示,p只能存放一个int类型的变量的地址

      char *p1; //定义了一个指针变量,变量名是p1
                //p1只能存放一个char类型数变量的地址

      int num=10;
      char *p = # //警告


    4、指针变量定义的注意事项

      1)“*”  必须得有,如果没有就相当于定义一个普通变量
      2)指针变量能用来存放数值或者字符之类的吗? 不能
      3)指针变量,归根结底还是变量,也有全局和局部变量之分


  
    //定义两个变量,并且给变量进行初始 a = 4, b = 5
    int a=4,b=5;
    //先定义变量,然后在初始化变量值
    int a1;
    a1 = 10;
   
指针变量也是变量
指针变量的使用: 定义指针变量  ----> 初始化指针变量 ---> 使用(使用指针变量间接的存取内存单元的值)
   
指针变量如果不初始化会有什么后果?
    结论:如果一个指针变量定义以后,如果不进行初始化
         这个指针变量存放的事一个垃圾数,这个指针变量,称之为 野指针
   
一定要避免操作野指针,因为可能会带来意向不到的错误
   int *p10;  //值是一垃圾值,有可能存放是系统程序的地址
   *p10 = 438; //可能会造成系统崩溃
   
   p10 = &a;

1 个回复

倒序浏览
与君共勉,努力学。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马