【C语言】习题练手套餐 2

news2025/5/29 7:42:55

每日习题分享。

字符串函数的运用

首先回顾一下字符串函数。

字符串长度

strlen(const char *s);

功能:计算字符串的长度,不包含终止符\0

字符串连接

char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);

功能:将src追加到dest后。strncat最多追加n个字符。

字符串连接

char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);

功能:将src追加到dest后。strncat最多追加n个字符。

字符串比较

int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);

功能:比较字符串。返回值为 0 表示相等,<0 表示s1小于s2,>0 表示s1大于s2strncmp最多比较n个字符。

字符串分割

char *strtok(char *str, const char *delim);

功能:将字符串按分隔符delim分割成多个子串。(例如 ,.)

习题一 

 

#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
int main()
{
	char s[MAXLEN + 1], t[MAXLEN + 1];
	int len_s, len_t;
    if(fgets(s, sizeof(s), stdin) != NULL)
    {
        // 去掉末尾的换行符
        len_s = strlen(s);

        if (len_s > 0 && s[len_s - 1] == '\n') 
        {
            s[len_s - 1] = '\0';
            len_s--;
        }
    }
    if (fgets(t, sizeof(t), stdin) != NULL)
    {
        len_t = strlen(t);
        if (len_t > 0 && t[len_t - 1] == '\n')
        {
            t[len_t - 1] = '\0';
            len_t--;
        }
    }

    // 检查连接后的字符串长度是否超过1000个字符

    if (len_s + len_t > MAXLEN)
    {

        printf("错误:连接将导致字符串长度超限。\n");
        printf("%s\n", s);

    }
    else 
    {
        // 连接字符串 t 到 s 的末尾

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

    }

    return 0;

}

本题其实没有任何难度,但是仅仅使用strcat函数的话是不会通过的。需要考虑众多的因素。

例如:
这里把考虑长度的部分删除,直接strcat,输出。

 

习题二

 

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

int main() 
{
    char s[1001];
    int pos, len;

    // 读取字符串(包含空格)
    if (fgets(s, sizeof(s), stdin) == NULL) 
    {
        return 1;
    }

    // 移除换行符
    size_t len_s = strlen(s);
    if (len_s > 0 && s[len_s - 1] == '\n') 
    {
        s[--len_s] = '\0';
    }

    // 读取位置和长度
    if (scanf("%d %d", &pos, &len) != 2) 
    {
        return 1;
    }

    // 调整为0-based索引
    pos--;

    // 检查位置有效性
    if (pos >= len_s) 
    {
        printf("%s\n", s);
        return 0;
    }

    // 计算实际删除长度
    int delete_len = (pos + len > len_s) ? len_s - pos : len;

    // 移动剩余字符覆盖删除部分
    memmove(s + pos, s + pos + delete_len, len_s - (pos + delete_len) + 1);

    // 输出结果
    printf("%s\n", s);

    return 0;
}

习题三

首先我们需要考虑下标与位置的关系,由题目可知 6指的是下标5。易错点

其他的在按题目要求来书写。

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

#define MAX_LEN 1000

int main() 
{
    char s[MAX_LEN + 2]; // 主串缓冲区,足够容纳输入和换行符

    fgets(s, sizeof(s), stdin); // 读取主串

    // 去除末尾的换行符
    size_t len_s = strlen(s);
    if (len_s > 0 && s[len_s - 1] == '\n')
    {
        s[len_s - 1] = '\0';
        len_s--;
    }

    int pos, len;
    scanf("%d %d", &pos, &len); // 题目保证参数合法,无需检查

    // 直接截取并输出,无需调整
    int i;
for (i = 0; i < len && (s + pos - 1)[i] != '\0'; i++)
{
    putchar((s + pos - 1)[i]);
}
putchar('\n');

    return 0;
}

习题四

 这是一道题的测试点,如果提交后没有通过,需要通过这些来修改代码。

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

char* insertString(char* s, char* t, int pos) {
    int len_s = strlen(s);
    int len_t = strlen(t);

    // Check if pos is valid
    if (pos < 1 || pos > len_s + 1) {
        return NULL;
    }

    // Allocate memory for the new string
    char* result = (char*)malloc((len_s + len_t + 1) * sizeof(char));
    if (result == NULL) {
        return NULL;
    }

    // Copy the first part of s to result
    strncpy(result, s, pos - 1);
    result[pos - 1] = '\0';

    // Append t to result
    strcat(result, t);

    // Append the remaining part of s to result
    strcat(result, s + pos - 1);

    return result;
}

int main() {
    char s[1000], t[1000];
    int pos;

    // Read the input strings and position
    fgets(s, sizeof(s), stdin);
    s[strcspn(s, "\n")] = 0; // Remove newline character

    fgets(t, sizeof(t), stdin);
    t[strcspn(t, "\n")] = 0; // Remove newline character

    scanf("%d", &pos);

    // Insert t into s at position pos
    char* result = insertString(s, t, pos);

    if (result == NULL) {
        printf("错误:指定插入位置不存在。\n");
        printf("%s\n", s);
    } else {
        printf("%s\n", result);
        free(result);
    }

    return 0;
}

 

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

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

相关文章

[项目总结] 基于Docker与Nginx对项目进行部署

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

神经正切核推导(2)

对神经正切核的理解和推导&#xff08;1&#xff09;-CSDN博客 这篇文章包括很多概念的理解 声明&#xff1a; 本篇文章来自于Neural Tangent Kernel &#xff08;NTK&#xff09;基础推导 - Gearlesskai - 博客园 旨在对上述推导过程进行再推导与理解 手写推导部分与其他颜…

Ctrl+鼠标滚动阻止页面放大/缩小

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 一般在我们做大屏的时候&#xff0c;不希望Ctrl鼠标上下滚动的时候页面会放大/缩小&#xff0c;那么在有时候&#xff0c;又不希望影响到别的页面&#xff0c;比如说这个大屏是在另一个管理后台中&am…

3d世界坐标系转屏幕坐标系

世界坐标 ——> NDC标准设备坐标 ——> 屏幕坐标 标准设备NDC坐标系 屏幕坐标系 .project方法将 将向量(坐标)从世界空间投影到相机的标准化设备坐标 (NDC) 空间。 手动实现HTML元素定位到模型位置&#xff0c;实现模型标签效果&#xff08;和css2Render原理同理&#…

【2025】基于Springboot + vue + 协同过滤算法实现的旅游推荐系统

项目描述 本系统包含管理员和用户两个角色。 管理员角色&#xff1a; 用户管理&#xff1a;管理系统中所有用户的信息&#xff0c;包括添加、删除和修改用户。 配置管理&#xff1a;管理系统配置参数&#xff0c;如上传图片的路径等。 权限管理&#xff1a;分配和管理不同角…

AI数据治理破局的战略重构

AI数据治理破局的战略重构 AI正在颠覆传统数据治理模式动态策略驱动的AI治理新模式构建AI时代的数据防护栏结语 人工智能正重塑商业世界&#xff0c;那些真正理解当代数据治理变革的企业将占据决定性优势。 旧日的数据治理手册已经无法应对AI时代的全新挑战&#xff0c;我们需要…

QT6安装与概念介绍

文章目录 前言installModulesQt Core元对象系统属性系统对象模型对象树和所有者信号 & 槽 前言 QT不是纯粹的C标准&#xff0c;它在此基础上引入MOC编译器&#xff0c;在调用C编译器之前会使用该编译器将非C的内容如 Q_OBJECT、signal:等进行处理。此外QT还引入了对象间通…

Docker(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南

引言 docker 的快速部署与高效运行依赖于两大核心环节&#xff1a;基础环境搭建与镜像生态优化。本期博文从零开始&#xff0c;系统讲解 docker 服务的管理配置与镜像加速实践。第一部分聚焦 docker 服务的安装、权限控制与自启动设置&#xff0c;确保环境稳定可用&#xff1b…

Lua基础语法

文章目录 一、注释二、 数据类型1. 注意事项2. 全局/局部变量 三、 标识符1. 保留字2. 变量3. 动态类型 四、 运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. 其他运算符 五、 函数1. 固定参函数2. 可变参函数3. 可返回多个值4. 函数作为参数 六、循环控制语句1. while...do…

2025年渗透测试面试题总结-匿名[实习]安全工程师(安全厂商)(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一面技术问题 1. Burp插件原理 2. JavaWeb项目经验 3. CC1-7链原理&#xff08;以CC6为例&#xff0…

【node.js】实战项目

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. 项目概览与架构设计1.1 实战项目&#xff1a;企业级电商管理系统1.2 技术栈选择 2. 项目初始化与基础架构2.1 项目结构设计2.2 基础配置管理 3. 用户服务实现3.1 用户服务架构3.2 用户模型设计3.3 用户服务…

免费插件集-illustrator插件-Ai插件-查找选中颜色与pantone中匹配颜色

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;实现查找选中颜色与pantone中匹配颜色。首先从下载网址下载这款插件https://download.csdn.net/download/m0_6731…

[爬虫实战] 爬微博图片:xpath的具体运用

博客配套代码发布于github&#xff1a;微博图片 相关知识点&#xff1a;图片懒加载 [爬虫知识] 数据解析 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 这里我们以网页微博图片为例&#xff0c;尝试获取该页面下所有图片并保存。 一、分析网站 刷…

MySQL中简单的操作

一.数据库 1.1数据库的建立&#xff1a; create database 库名&#xff1b; 1.2数据库的查看&#xff1a; show databases&#xff1b; 1.3数据库的删除&#xff1a; drop database 库名&#xff1b; 二.数据库中的表 2.1表的建立&#xff1a; create table 表名&…

防震基座在半导体晶圆制造设备抛光机详细应用案例-江苏泊苏系统集成有限公司

在半导体制造领域&#xff0c;晶圆抛光作为关键工序&#xff0c;对设备稳定性要求近乎苛刻。哪怕极其细微的振动&#xff0c;都可能对晶圆表面质量产生严重影响&#xff0c;进而左右芯片制造的成败。以下为您呈现一个防震基座在半导体晶圆制造设备抛光机上的经典应用案例。 企…

Lua5.4.2常用API整理记录

一、基础函数 1.type(value)​​ 返回值的类型&#xff08;如 "nil", "number", "string", "table", "function" 等&#xff09;。 代码测试&#xff1a; a 0 print(type(a)) a nil print(type(a)) a "aaaaaaaa&…

Python打卡训练营学习记录Day36

仔细回顾一下神经网络到目前的内容&#xff0c;没跟上进度的同学补一下进度。 作业&#xff1a;对之前的信贷项目&#xff0c;利用神经网络训练下&#xff0c;尝试用到目前的知识点让代码更加规范和美观。 import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数…

什么是智能体agent?

文章目录 什么是智能体agent&#xff1f;最基本的核心思想我们是如何走到今天以及为什么是现在如何从思维上剖析“一个智能体系统”痛苦的教训结论 什么是智能体agent&#xff1f; 原文链接&#xff1a;https://windsurf.com/blog/what-is-an-agent 本文探讨了AI智能体的核心概…

Obsidian 数据可视化深度实践:用 DataviewJS 与 Charts 插件构建智能日报系统

Obsidian 数据可视化深度实践&#xff1a;用 DataviewJS 与 Charts 插件构建智能日报系统 一、核心架构解析 本系统基于 Obsidian 的 DataviewJS 和 Charts 插件&#xff0c;实现日报数据的自动采集、可视化分析及智能回溯功能&#xff08;系统架构原理见&#xff09;。其技术…

6.4.3_有向无环图描述表达式

有向无环图&#xff1a; 有向图中不存在环即为有向无环图DAG图&#xff0c;即如下V0->V4->v3->V0或者V4->V1->v4就存在环不是有向无环图&#xff0c;即在一个路径中一个顶点不能出现2次&#xff1f; DAG描述表达式&#xff1a; 算术表达式用树来表示&#xff0…