c字符串详细解析

简介: c字符串详细解析

关于作者:

2019NOIP退役成员,学习c语言已有多年经验, 更懂得考试的题目,和初学者学习时所遇到的问题

华为云享专家,以及CSDN的新星创作者,有写博客的一定能力

关于本栏目

本栏目的宗旨是带你入门c语言,作者打算用题海+c语言的概念来完成本栏目,

适用人群: 面向广大的编程爱好者和大学生来进行创作

学完本栏后你能达到的水平:计算机二级水平左右,入门c语言学习

题目:主要来源于网络和c语言的入门算法题目

写在前面的话(第十四天)

记住我们的宗旨:努力去做,让一切交给时间来评判!

字符串

3种形式

1.字符数组

当以char型数组来存放字符串时,数组名市字符串的首地址
char name[] = "shuofeng";
则字符串name在内存中占有8个字节
  1. 动态字符串
可以动态的分配一块内存,然后在这块内存上存放一串字符,换句话说就是这个字符串对象在堆上存储
char str = (char )malloc(12);
str[0] = 's';
str[1] = 'h';
str[2] = 'u';
str[3] = 'o';
str[4] = 0; ,\0 是用于标记字符串的结束
  1. 常量字符串
在前面我们说过所有的字面常量都有它自己的数据类型,下面我们来说一种新的常量: 字符串字面常量
"hello world";
"shuofeng";
const char* a = "hello world";

都是字符串字面常量,其中const char*表示这个指针指向的内存是只读的,不能修改里面的内容。

字符串中常用的函数

字符串中有大量的函数,对于初学者来说我们掌握下面的即可
在这里插入图片描述

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

int main()
{
    char str1[14] = "runoob";
    char str2[14] = "google";
    char str3[14];
    int  len;

    /* 复制 str1 到 str3 */
    strcpy_s(str3, str1);
    printf("strcpy( str3, str1) :  %s\n", str3);

    /* 连接 str1 和 str2 */
    strcat_s(str1, str2);
    printf("strcat( str1, str2):   %s\n", str1);

    /* 连接后,str1 的总长度 */
    len = strlen(str1);
    printf("strlen(str1) :  %d\n", len);

    return 0;
}

在这里插入图片描述

字符串的遍历

遍历字符串指的是从前往后访问每一个字符

int show_string(const char* str)
{
    for(int i = 0; str[i] ; i++)
    {
        printf("%c",str[i];
    }
    return 0;
}

结束‘\0'的作用就是标识字符串的结尾

字符串插入与删除的讨论

删除

假设给定字符串char [] = "hello"
在这里插入图片描述
删除e
在这里插入图片描述
相当于把s[2]-s[5]这几个内存中所含的各值向前移动一个字节

我们用代码来实现一下就是这样的:

void erase(char *src,int index)
{
    for(int i = 0; ; i++)
    {
        src[i-1] = src[i];
        if(src[i] == '\0')
            break;
    }
}

插入

插入一个字符串首先要保证原数组空间足够大,原因也和内存有关,在想指定位置插入字符串,后面的字符要依次向后移动

void Insert(char* src,int index,char ch)
{
    int len = strlen(src);
    for(int i = 0; i > index; i++)
        src[i] = src[i-1];//逐个后移
    src[index] = ch;//在这里插入
}

时间成本问题:

在字符串中的插入和删除操作都是一个高成本的操作,即使只增删一个字符也要把后面的字符都移动一遍

练习

数字游戏
语句解析
压缩技术

相关文章
|
1月前
|
算法 测试技术 C#
【解析几何】 【多源路径】 【贪心】1520 最多的不重叠子字符串
【解析几何】 【多源路径】 【贪心】1520 最多的不重叠子字符串
|
1月前
|
JavaScript 前端开发 Java
|
5月前
|
存储 安全 C语言
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
79 0
|
5天前
|
SQL 缓存 JavaScript
深入解析JavaScript中的模板字符串
深入解析JavaScript中的模板字符串
13 1
|
11天前
|
弹性计算 运维 Shell
|
16天前
|
存储 NoSQL 安全
Redis入门到通关之数据结构解析-动态字符串SDS
Redis入门到通关之数据结构解析-动态字符串SDS
18 0
|
1月前
|
存储 测试技术
luatos 字符串与数组转换,解析hex数组
luatos 字符串与数组转换,解析hex数组
26 1
|
5月前
|
JSON 数据格式
gson自定义Type解析json数组字符串
gson自定义Type解析json数组字符串
|
5月前
|
Java API
【Java】深层次解析字符串比较
【Java】深层次解析字符串比较
|
5月前
|
SQL JSON 关系型数据库
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
62 0

推荐镜像

更多