字符串

字符串:

 (1).基础

       C语言里所有文字信息必须记录在一组连续的字符类型存储区里

       所有文字信息最后必须以'\0'字符作为结尾,这个字符的ASCII码是0


       只有'\0'字符前面的部分被当做有效字符

       所有字符都可以用字符指针表示

(2). 字符串字面值

      字符串字面值,用双引号里面的一组字符表示,eg:"qwer"a

      字符串字面值的内容在程序执行过程中不可以修改

(3).编译器对待字符串

     编译器在编译的时候会自动在字符串的后面加'\0'字符

     编译器会自动把字符串字面值替换成第一个字符存储区的地址

     

字符数组:

       字符出租也可以表示字符串,数组元素为字符

       只有包含'\0'的字符的字符数组,才可以用来表示字符串

      可以采用字符串字面值对字符数组进行初始化

      计算机会把字符串字面值里的'\0'字符复制到字符数组中去

      字符数组里的字符串内容可以修改

      可以使用%s做占位符把字符串的内容打印在屏幕上


字符标准函数

      使用字符相关标准函数,需要#include <string.h>

     strcat: 把一个字符串里的有效字符追加到另外一个字符串的末尾,这个函数有可能超过数组范围

     strncat: 功能和strcat类似,多了一个参数用来表示最多可以追加多少个字符,可以避免超过数组范围

     strcmp: 比较两个字符串的大小

     strncmp: 只比较两个字符串的前n个字符

     strcpy: 把一个字符串复制到一个字符数组里,这个函数也可以超过数组的范围,多了一个参数表示最多复制多少个字符

     memset:把字符数组里多个存储区的内容,设置成某个字符

     strstr:在一个字符串里查找另外一个字符串的位置,如果没有找到,则返回值是NULL 

     sprintf: 把多个数字按格式打印在字符数组里形成字符串

     sscanf: 从字符串里获得多个数字并记录在变量里

     atoi: 把字符串里的整数转换成整数类型

     atof: 把字符串里的浮点数转换成浮点类型(用vi编辑有误)

以下代码有误:

       strcmp 返回值是正数,负数和0.












键盘字符串记录到数组:

    用scanf函数效果不好

    用fgets函数可以把键盘得到字符串并记录到数组里,这个函数需要三个参数:

    1.数组名称

    2.数组里存储区个数

    3.stdin表示键盘

如果输入内容不能充满数组,就会把用户最后输入的换行字符也读入到数组里

如果用户输入内容过多,则会把后面的部分留给下次读取

每次使用fgets函数从键盘得到字符串以后,都必须使用一个分支把可能存在的多余数据清理掉


  


1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 /*
  5   编写模拟登陆程序,正确的用户名是admin
  6   正确的密码是123456,最多三次机会,最后给出提示
  7 */
  8 int main()
  9 {
 10     int num=0;
 11     char str[10]={0};
 12     for(num=0;num<3;num++)
 13     {
 14         printf("请输入用户名:");
 15         fgets(str,10,stdin);
 16         if(strlen(str)==9 && str[8]!='\n')
 17         {
 18             scanf("%*[%^\n]");
 19             scanf("%*c");
 20         }
 21         printf("str1=%s\n",str);
 22         if(strcmp(str,"admin\n"))
 23         {
 24           continue;
 25         }
 26        printf("请输入密码:");
 27        fgets(str,10,stdin);
 28        if(strlen(str)==9 && str[8]!='\n')
 29        {
 30            scanf("%*[%^\n]");
 31            scanf("%*c");
 32        }
 33        printf("str2=%s\n",str);
 34        if(strcmp(str,"123456\n"))
 35            continue;
 36        break;
 37     }
 38      if(num<=2)
 39        printf("登陆成功\n");
 40      else
 41        printf("登陆失败\n");
 42     return 0;
 43 }
 44 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值