纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

c语言字符串与字符串数组 c语言中字符串与字符串数组详解

crazy_zhangcong   2021-11-18 我要评论
想了解c语言中字符串与字符串数组详解的相关内容吗crazy_zhangcong在本文为您仔细讲解c语言字符串与字符串数组的相关知识和一些Code实例欢迎阅读和指正我们先划重点:c语言字符串和字符数组,c语言字符串和字符数组的区别,c语言中字符串数组下面大家一起来学习吧。

字符串

  • 用双引号引起来的就是字符串字符串由字符组成
  • 字符串使用%s格式化输出
  • 字符串以\0结尾没有\0就不是字符串
  • 只要是用双引号括起来的都是字符串
  • 字符串的本质就是数组
    注意: 字符串变量和普通的字符数组有一定的区别C语言规定字符串必须以\0结尾(作为字符串的结束符号)所以字符串变量的元素个数比字符数组的元素多一个\0
#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    char name[] = "zhangsan";
    
    // %u 表示无符号sizeof 返回的是一个无符号长整型
    printf("name --> %s  size --> %lu\n", name, sizeof(name));      // name --> zhangsan  size --> 9
    
    // 字符串本质就是一个字符数组前提是末尾以\0结尾
    char name1[] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n', '\0'};
    printf("name1 --> %s\n", name1);    // name1 --> zhangsan
    
    // 部分初始化中没有被初始化的元素默认是0, \0 对应的ASCII值是 0
    char name2[9] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n'};
    printf("name2 --> %s\n", name2);    // name2 --> zhangsan
    
    // 字符串的本质就是数组
    char name3[] = "lisi";
    printf("name3 --> %s \n", name3);   // name3 --> lisi
    name3[0] = 'x';
    printf("name3 --> %s \n", name3);   // name3 --> xisi
   

    return 0;
}

字符串输出

字符串输出可以使用printf 和 puts 进行输出各有利弊

- 输出字符串
 - 使用printf的%s占位符输出
  - 弊端:如果想要换行必须加上\n
  - 优点:可以自定义格式化需要的字符串也就是可以按照我们需要的格式来输出
 - 使用puts函数进行输出
  - 优点:可以自动换行
  - 缺点:不可以自定义格式只能原样输出

// printf
char str[] = “lisi”;
printf(“name = %s!!!\n”, str);
printf("-----\n");

// puts
// 自动换行只能原样输出
puts(str);
printf("----\n");

#### 字符串输入

字符串输入可以使用 scanf 和 gets 进行输入各有利弊

输入字符串

  • 使用scanf的%s占位符接收键盘输入的字符串
    • scanf 接收字符串会以空格tab回车作为结束符号利用scanf接收字符串时字符串不能出现空格tab回车
  • 使用gets接收字符串
// scanf
printf("请输入一个字符串:\n");
char buf[10];
scanf("%s", buf);   // 输入:fdsa fdas
printf("buf --> %s\n", buf);    // buf --> fdsa


// gets
char buf[10];
printf("请输入一个字符串使用gets接收:\n");
gets(buf);
printf("buf --> %s\n", buf);    // buf --> fdsaf fdsa

字符串常用方法

计算字符串的长度

#include <stdio.h>
#include <string.h>

// 申明函数
int stringLen(char value[]);


int main(int argc, const char * argv[]) {
    
    char string[] = "zhangsan";
    
    // 计算字符串的长度不包括末尾\0的长度
    
    // 调用系统内置函数strlen 计算字符串的长度需要先导入 string.h 头文件
    size_t length = strlen(string);     // lenght --> 8
    printf("lenght --> %lu\n", length);
    
    
    // 自定义计算字符串长度的函数
    int length2 = stringLen(string);
    printf("length2 --> %i\n", length2);    // length2 --> 8
    return 0;
}

// 自定义计算字符串长度的函数
int stringLen(char value[]) {
    int count = 0;
    while (value[count] != '\0') {
        count ++;
    }
    return count;
}

字符串拼接

使用内置方法strcat进行2个字符串拼接将后者拼接到前者后面前提是前者空余的长度要大于后者的长度否则会报错

使用内置方法strncat进行2个字符串拼接可以指定将后者的前多少个字符与前者进行拼接

// 字符串拼接
char str1[20] = "hello";
char str2[10] = " world";

printf("str1拼接前 --> %s\n", str1);        // str1拼接前 --> hello
printf("str2拼接前 --> %s\n", str2);        // str2拼接前 -->  world
strcat(str1, str2);
printf("\n");
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world

// 使用 strncat 可以指定将后者的前多少个字符与前者进行拼接
strncat(str1, str2, 3);		// 最后一个参数3表示指定str2的前多少个字符拼接到str1后面
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world wo
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world

字符串拷贝

strcpy 函数会将源的数据拷贝到目录中并且会覆盖掉目标中原有的数据目标的长度必须能够存放拷贝的数据长度不够会报错

strncpy 函数在strcpy函数的基础之上增加一个参数可以指定拷贝几个字符0

// 将str2中的内容拷贝到str1中
char str1[20] = "hello";
char str2[] = " world!";

printf("str1 拷贝前 --> %s\n", str1);      // str1 --> hello
printf("str2 拷贝前 --> %s\n", str2);      // str2 -->  world!
strcpy(str1, str2);
printf("str1 拷贝后 --> %s\n", str1);      // str1 -->  world!
printf("str2 拷贝后 --> %s\n", str2);      // str2 -->  world!

// strncpy 函数在strcpy函数的基础之上增加一个参数可以指定拷贝几个字符
char str3[20] = "hello";
char str4[] = "_world!";
strncpy(str3, str4, 2);
printf("str3 拷贝后 --> %s\n", str3);      // str3 拷贝后 --> _wllo
printf("str4 拷贝后 --> %s\n", str4);      // str4 拷贝后 --> _world!

字符串比较

strcmp 会对传入的字符串进行比较比较完毕后会返回一个整型的值

/*
	int result = strcmp(str1, str2)
	如果result等于0证明两个字符串相等
	如果result小于0证明str1小于str2
	如果result大于0证明str1大于str2
*/

char str1[] = "abc";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> 0

char str1[] = "ab1";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> -50

char str1[] = "absadsa";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> 16

字符串数组

如果想存储一堆字符串可以使用字符串数组字符串数组就是二维数组

char names[5][20] = {
	"zhangsan",
	"lisi",
	"wangwu",
}

总结


相关文章

猜您喜欢

  • Go语言第一个程序的解读 GO语言基础入门第一个go程序解读

    想了解GO语言基础入门第一个go程序解读的相关内容吗枫少文在本文为您仔细讲解Go语言第一个程序的解读的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Go语言入门,Go语言第一个程序下面大家一起来学习吧。..
  • Java 排序算法 Java 十大排序算法之希尔排序刨析

    想了解Java 十大排序算法之希尔排序刨析的相关内容吗龍弟-idea在本文为您仔细讲解Java 排序算法的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java,排序算法,Java,希尔排序下面大家一起来学习吧。..

网友评论

Copyright 2020 www.tdogsoftware.com 【零度软件园】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式