c字符串详细解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 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;//在这里插入
}

时间成本问题:

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

练习

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

相关文章
|
3月前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
86 5
|
4月前
|
存储 关系型数据库 MySQL
|
5月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
5月前
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
299 1
|
6月前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
7月前
|
SQL 存储 JSON
Hive 解析 JSON 字符串数据的实现方式
Hive 提供 `get_json_object` 函数解析 JSON 字符串,如 `{&quot;database&quot;:&quot;maxwell&quot;}`。`path` 参数使用 `$`、`.`、`[]` 和 `*` 来提取数据。示例中展示了如何解析复杂 JSON 并存储到表中。此外,Hive 3.0.0及以上版本内置 `JsonSerDe` 支持直接处理 JSON 文件,无需手动解析。创建表时指定 `JsonSerDe` 序列化器,并在 HDFS 上存放 JSON 文件,可以直接查询字段内容,方便快捷。
384 3
|
7月前
|
移动开发 iOS开发
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
59 1
|
6月前
|
XML 数据采集 自然语言处理
掌握Python字符串:全面解析与实战指南
掌握Python字符串:全面解析与实战指南
|
7月前
|
SQL 缓存 JavaScript
深入解析JavaScript中的模板字符串
深入解析JavaScript中的模板字符串
88 1
|
7月前
|
SQL JSON 监控
实时计算 Flink版产品使用合集之直接将 JSON 字符串解析为数组的内置函数如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多