zoukankan      html  css  js  c++  java
  • 12-C语言字符串

    目录:

    一、字符串

    二、字符串输入输出函数

    三、指针数组(字符串数组)

    回到顶部

    一、字符串

    1 一组字符数组,以数组的首地址开始,以ASC码的''结束。

    2 字符串与普通数组的区别:普通数组没有结束标识,而字符串是有的。

    3 字符串的定义方式:

    字面值:"hello"

    使用字符数组定义字符串:char str[10] = {''a,'b',''};

    使用字符指针:char* str = "hello";

    4 字符串创建方式的不同

    声明的变量数组是放在内存中的栈区。

    字面值创建的字符在内存代码区。如果创建的字符串,且值是相同的,只会创建一个内存区域,值是只读的。

    使用数组方式创建的字符串,放在内存中栈区,其值可以改变。

    字符指针,只是指向了内存的一个区域。

     1 #include <stdio.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5 
     6     // 字面值
     7     printf("Hello, World!
    ");
     8     // 字符数组
     9     char str[10] = {'h','e','l','l','o',''};
    10     str[1] = 'a';
    11     char str5[10] = {'h','e','l','l','o',''};
    12     // 字符指针
    13     char* str2 = "hello";//字面值字符串不可以改变其值
    14     char* str3 = str;
    15     char* str4 = "hello";
    16     // 输出
    17     printf("str:%s
    ",str);
    18     printf("str2:%s
    ",str2);
    19     printf("str3:%s
    ",str3);
    20     printf("str:%p
    ",str);
    21     printf("str2:%p
    ",str2);
    22     printf("str3:%p
    ",str3);
    23     printf("str4:%p
    ",str4);
    24     printf("str5:%p
    ",str5);
    25     return 0;
    26 }

    练习:键盘输入个人信息,姓名:年龄:性别:薪资:

     1 #include <stdio.h>
     2 //练习:键盘输入个人信息,姓名:年龄:性别:薪资:
     3 int main()
     4 {
     5     printf("输入个人信息:
    ");
     6     char name[20];
     7     char sex;
     8     int age;
     9     double salary;
    10     printf("姓名:");
    11     scanf("%s",name);
    12     printf("性别:");
    13     scanf("%*c");
    14     scanf("%c",&sex);
    15     printf("年龄:");
    16     scanf("%d",&age);
    17     printf("薪资:");
    18     scanf("%lf",&salary);
    19     printf("姓名%s
    ",name);
    20     printf("性别%c
    ",sex);
    21     printf("年龄%d
    ",age);
    22     printf("薪资%lf
    ",salary);
    23     return 0;
    24 }

    xcode快捷键:command +a 、 Ctrl+i全选格式化

    回到顶部

    二、字符串输入输出函数

    1输入

    scanf()接收用户从键盘上输入的数据。

    scanf(%*c)清空缓存区

    练习:输入三次性别,并输出。

    在输入字符串的时候不存在缓冲区问题,但存在安全性问题,(内存溢出)。

    解决:fgets()函数

    语法格式:fgets(参数1,参数2,参数3)

    参数1保存数据的首位置

    参数2保存的是长度(包括结束符)

    参数3获取数据的方式

    注:使用fgets方式输入数据的时候,会自动在数据的后面加上' ';计算数据的时候,原有数据内容加上'',' ';解决安全性问题,主要是参数2;

    假如字符串长度是3:

    abcde   ->  abcde

    2 输出

    printf()可以输出字符串,并且可以根据占位符的个数来决定输出字符串的个数。

    puts()可以输出一个字符串,而且是自动换行。

    printf()与puts()区别:

    相同点:都可以输出字符串

    不同点:printf()需要手动换行,可以多次输出字符串,puts()自动换行,只能输出一个字符串。

    3 const关键字,可以将变量变为只读,只可以在初始化的时候才可以改变变量的值,此变量就为常量,

    const int* p = &i;//指针指向的值变为只读

    int* const p = &i;//指针的值变为只读

     1 /*输入函数 缓冲区问题*/
     2 #include <stdio.h>
     3 
     4 int main(int argc, const char * argv[])
     5 {
     6     /*
     7      char ch1,ch2,ch3;
     8      printf("请输入第一个字符:
    ");
     9      scanf("%c",&ch1);
    10      scanf("%*c");//清除缓冲存
    11      printf("请输入第二个字符:
    ");
    12      scanf("%c",&ch2);
    13      scanf("%*c");
    14      printf("请输入第三个字符:
    ");
    15      scanf("%c",&ch3);
    16      
    17      printf("输出第一个字符:%c
    ",ch1);
    18      printf("输出第二个字符:%c
    ",ch2);
    19      printf("输出第三个字符:%c
    ",ch3);
    20      */
    21     
    22     char ch1[6],ch2[6];
    23     printf("请输入第一个字符串:
    ");
    24     fgets(ch1, 6, stdin);
    25     //printf("输出第一个字符串:%s %s
    ",ch1,ch1);
    26     puts(ch1);
    27     printf("test
    ");
    28     /*
    29     printf("请输入第二个字符串:
    ");
    30     fgets(ch2, 6, stdin);
    31     printf("输出第二个字符串:%s
    ",ch2);
    32      */
    33         return 0;
    34 }

    回到顶部

    三、指针数组(字符串数组)

    1 数组中的元素是指针,而指针又是字符串,所有也叫字符串数组。

    2 保存多个字符串内容

    3 定义指针数组:char* array[3]={"gy","zf","lb"};

    4 遍历

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

          printf("array[%d]:%s ",i,array[i]);

    }

     1 //指针数组 字符串数组
     2 #include <stdio.h>
     3 void test(){
     4     // 声明指针数组
     5     char* names[3] = {"guanyu","zhangfei","liubei"};
     6     //遍历
     7     for (int i = 0; i < 3; i++) {
     8         printf("names:%s
    ",names[i]);
     9     }
    10 }
    11 //输入3个人姓名,输出
    12 void test2(){
    13     char* names[3];
    14     char name[3][10];
    15     for (int i = 0; i < 3; i++) {
    16         printf("输入姓名:
    ");
    17         scanf("%s",name[i]);
    18         names[i] = name[i];
    19     }
    20     for (int i = 0; i < 3; i++) {
    21         printf("names:%s
    ",names[i]);
    22     }
    23 }
    24 int main(int argc, const char * argv[])
    25 {
    26 
    27     test2();
    28     return 0;
    29 }
  • 相关阅读:
    Ignoring HTTPS certificates
    利用Httponly提升web应用程序安全性
    HttpUrlConnection java.net.SocketException: Software caused connection abort: recv failed
    DISPOSE_ON_CLOSE 和 EXIT_ON_CLOSE 的区别
    Swing多线程
    攒机知识积累
    数组最大子数组和
    fork()详解
    理解Socket编程【转载】
    STM32F407_LED代码
  • 原文地址:https://www.cnblogs.com/yangmx/p/3474255.html
Copyright © 2011-2022 走看看