C语言进阶课程学习记录 - 字符串与常见问题分析

news2024/11/23 9:07:37

C语言进阶课程学习记录 - 字符串与字符串问题分析

  • 字符串
    • 实验-字符串定义
    • 实验-字符串作为字符数组使用
    • 实验-字符串长度判断
    • 小结
  • 字符串问题分析
    • 实验-snprintf
    • 实验-字符数组,strlen,sizeof
    • 实验-字符串相等比较
    • 实验-循环右移

本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录

字符串

在这里插入图片描述
在这里插入图片描述

实验-字符串定义


#include <stdio.h>

int main()
{
    char ca[] = {'H', 'e', 'l', 'l', 'o'};
    char sa[] = {'W', 'o', 'r', 'l', 'd', '\0'};
    char ss[] = "Hello world!";
    char* str = "Hello world!";

    printf("%s\n", ca);
    printf("%s\n", sa);
    printf("%s\n", ss);
    printf("%s\n", str);

    return 0;
}

    /*
    output:
Hello$0@        //缺失\0
World
Hello world!
Hello world!
    */

在这里插入图片描述在这里插入图片描述

实验-字符串作为字符数组使用

#include <stdio.h>

int main()
{
    char b = "abc"[0];
    char c = *("123" + 1);
    char t = *"";

    printf("%c\n", b);
    printf("%c\n", c);
    printf("%d\n", t);

    printf("%s\n", "Hello");
    printf("%p\n", "World");

    return 0;
}

    /*
    output:
a
2
0
Hello
00403032
    */

在这里插入图片描述

实验-字符串长度判断

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

int main()
{
    char s[] = "Hello\0world";
    int i = 0;

    for(i=0; i<sizeof(s)/sizeof(char); i++)
    {
        printf("%c\n", s[i]);
    }

    printf("%s\n", s);

    printf( "%d\n", strlen(s) );
    printf( "%d\n", strlen("123") );


    return 0;
}

    /*
    output:
H
e
l
l
o

w
o
r
l
d

Hello
5
3
    */

小结

C语言通过字符数组模拟字符串
C语言中的字符串使用’\0’作为结束符
字符串字面量的本质为字符数组
字符串相关函数都依赖于结束符’\0’

字符串问题分析

实验-snprintf

char buff[10]={'0'};
    char src[] = "hello %s";
    snprintf(buff,sizeof(buff),src);//output:hello ?a    缺失格式化信息
    snprintf(buff,sizeof(buff),src,"wo");//hello wo
    printf("%s\n",buff);

在这里插入图片描述

实验-字符数组,strlen,sizeof

    #define STR "Hello, \0D.T.Software\0"

    char* src = STR;
    char buf[255] = {0};

    snprintf(buf, sizeof(buf), src);

    printf("strlen(STR) = %d\n", strlen(STR));//7
    printf("sizeof(STR) = %d\n", sizeof(STR));//21+1=22

    printf("strlen(src) = %d\n", strlen(src));//7
    printf("sizeof(src) = %d\n", sizeof(src));//8 xx  指针的大小 4

    printf("strlen(buf) = %d\n", strlen(buf));//255
    printf("sizeof(buf) = %d\n", sizeof(buf));//255

    printf("src = %s\n", src);//"Hello, "
    printf("buf = %s\n", buf);//"Hello, "
    
//strlen(STR) = 7
//sizeof(STR) = 22
//strlen(src) = 7
//sizeof(src) = 4
//strlen(buf) = 7
//sizeof(buf) = 255
//src = Hello,
//buf = Hello,

在这里插入图片描述

实验-字符串相等比较

    #define S1 "D.T.Software"
    #define S2 "D.T.Software"

    if( S1 == S2 )
    {
        printf("Equal\n");
    }
    else
    {
        printf("Non Equal\n");
    }

    if( strcmp(S1, S2) == 0 )
    {
        printf("Equal\n");
    }
    else
    {
        printf("Non Equal\n");
    }
//output:
//Equal
//Equal

在这里插入图片描述

实验-循环右移

#include <stdio.h>
#include <string.h>
//目标字符串的指针, 结果字符串指针,移动位数
void right_shift_r(const char* src, char* result, unsigned int n)
{
    const unsigned int LEN = strlen(src);
    int i = 0;

    for(i=0; i < LEN; i++)
    {
        result[(n + i) % LEN] = src[i];
    }

    result[LEN] = '\0';
}

int main()
{
    char result[255] = {0};

    right_shift_r("abcde", result, 2);

    printf("%s\n", result);

    right_shift_r("abcde", result, 5);

    printf("%s\n", result);

    right_shift_r("abcde", result, 8);

    printf("%s\n", result);

    return 0;
}


    /*
    output:
deabc
abcde
cdeab
    */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅入浅出之nginx

目录 工作流程正向代理概念 反向代理概念 nginx反向代理配置文件介绍解释作用 参考文章Nginx 常用指令和操作启动 Nginx测试配置文件快速关闭 Nginx优雅关闭 Nginx重载配置文件查看版本查看编译时的参数查看进程配置用户访问日志配置错误日志设置 web 根目录配置 server 块配置…

3.反转链表

1.题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&…

matplotlib手动调用默认配色

matplotlib 画图有个默认配色方案&#xff0c;在画不同图时会保持一致。如&#xff1a; import numpy as np import matplotlib.pyplot as plt# 图 1 数据 x np.arange(12).astype(np.float32) 1 y1 np.log(x) y2 1 / x y3 np.sin(x) # 图 2 数据 a np.random.randn(200…

光威神策PRO PCIe 5.0 SSD发布,国产固态硬盘进入10G俱乐部

全球半导体供应链的紧张局势和闪存资源的短缺让许多行业都面临着不小的压力 &#xff0c; 连带的也让消费者难以获取物美价廉的闪存产品 。但是&#xff0c;总有一些企业能够逆流而上&#xff0c; 像是 光威科技这家国产存储品牌&#xff0c; 最近就给国内消费者 带来了一个惊喜…

递归、搜索与回溯算法:⼆叉树中的深搜

⼆叉树中的深搜 深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的 ⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀&#xff0c;直到⼀条路径上的所有节点都被遍历 完毕&#xff…

工业数据采集平台:从起源到崛起的辉煌历程

关键词&#xff1a;工业数据采集平台, 工业数据采集, 工业数据采集分析,智能化 在当今数字化的时代&#xff0c;工业领域也在经历着深刻的变革。而工业数据采集平台的发展历程&#xff0c;正是这场变革中的重要篇章。 回首过去&#xff0c;工业数据采集曾是一个繁琐而复杂的过…

C++ AVL树底层实现原理

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;C知识分享⏪   &#x1f69a;代码仓库:C高阶&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C知识   &#x1f51d;&#x1f51d; 目录 前言 AVL 树 1.1 AVL树的概念 1.2 AVL树…

职场成长秘籍:如何利用团队例会提升自己

在职场中&#xff0c;团队例会是一个重要的沟通和协作平台。通过团队例会&#xff0c;我们可以了解项目进展、分享工作经验、解决问题和制定工作计划。那么&#xff0c;如何利用团队例会提升自己&#xff0c;实现职场成长呢&#xff1f;本文将为您揭晓答案。 一、积极发言&…

编程新手必看,python中循环语句学习(14)

介绍&#xff1a; Python3中的循环语句主要有两种&#xff1a;for循环和while循环。 for循环&#xff1a;用于遍历序列&#xff08;如列表、元组、字符串等&#xff09;中的元素&#xff0c;执行相应的代码块。在每次循环中&#xff0c;序列中的一个元素被赋值给一个变量&#…

暴力枚举法

虽然暴力枚举法有时候效率低&#xff0c;时间复杂度高&#xff0c;但是在面对小规模数据集的时候&#xff0c;暴力枚举法往往是很好的思维利器。 B: 01 串的熵&#xff08;5分&#xff09; 问题描述 #include <iostream> #include <cmath> #include <algorithm…

数据治理项目——深铁集团数据治理规划

目录 一、前言 二、数据治理内容与主要措施 2.1 实施背景 2.2 主要举措 2.2.1 制定数据战略目标 2.2.2 绘制数据治理蓝图 2.2.3 绘制数据治理制度 2.2.4 梳理数据资产目录 三、 应用效果 3.1 数据资产可视化管理 3.2 数据标准治理 3.3 集团大数据平台优化建设 一、…

web服务器是如何运行的?tomcat基本原理

tomcat基本流程 tomcat在启动时将webapps下的每个项目中的web.xml读取&#xff0c;获取相关信息。tomcat只关心Servlet 程序、Filter 过滤器、Listener 监听器&#xff0c;不关心其他类。 tomcat接收到请求后会将请求报文转换成一个httpServletRequest对象&#xff0c;包含请求…

【CSS面试题】Flex实现九宫格

考察知识&#xff1a; flex布局 水平垂直居中的实现 初始效果 代码关键&#xff1a;给父盒子添加以下属性 flex-wrap: wrap; /* 允许换行 */justify-content: space-around; /* 主轴对齐方式 */align-content: space-around; /* 多行在侧轴上的对齐方式 */<!DOCTYPE html&…

【干货】【常用电子元器件介绍】【集成电路】(二)--集成电路的识别和检测

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。 一、 集成电路型号的识别 集成电路的型号一般都在其表面印刷(或者激光刻蚀)出来。集成电路有各种型号,其 命名也有一定的规律,一般是由前缀、数字编号、后缀组成。前缀主要为英文字母,用来…

流动人员人事档案管理信息系统

流动人员人事档案管理信息系统是一种用于管理流动人员的人事档案的信息系统。该系统可以对流动人员的基本信息、工作经历、学历教育、培训记录、奖惩记录等进行管理和统计。通过该系统&#xff0c;可以方便地查询和维护流动人员的人事档案信息&#xff0c;提高人力资源管理的效…

【MATLAB基础】频谱分析

01.引言 频率是单位时间内某事件重复发生的次数,用ω表示,单位是赫兹(Hz)。设m时间内某事件重复发生n次,则此事件发生的频率ω为一。又因为周期定义为重复事件发生的最小时间间隔,故频率也可以表示为周期的倒数:ωn/m,T表示周期。频率是一个很重要的概念,在工程数学中常用于分…

43.基于SpringBoot + Vue实现的前后端分离-疫苗发布和接种预约系统(项目 + 论文)

项目介绍 本次使用Java技术开发的疫苗发布和接种预约系统&#xff0c;就是运用计算机来管理疫苗接种预约信息&#xff0c;该系统是可以实现论坛管理&#xff0c;公告信息管理&#xff0c;疫苗信息管理&#xff0c;医生管理&#xff0c;医院信息管理&#xff0c;用户管理&#x…

2022年蓝桥杯省赛——星期计算

目录 题目链接&#xff1a;1.星期计算 - 蓝桥云课 (lanqiao.cn) 题目描述 思路 代码实现 BigInteger常用方法 BigDecimal常用方法 总结 题目链接&#xff1a;1.星期计算 - 蓝桥云课 (lanqiao.cn) 题目描述 一直今天是星期六&#xff0c;请问 天后是星期几。 注意用数字…

第四百五十六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 使用方法 3. 内容总结 我们在上一章回中介绍了"overlay_tooltip用法"相关的内容&#xff0c;本章回中将介绍onBoarding包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的onBo…

AI大模型创新交汇点:当AI遇见艺术

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …