C++如何实现字符串的部分复制

 更新时间:2023年08月14日 10:17:49   作者:CNDaisy  
这篇文章主要介绍了C++如何实现字符串的部分复制问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C++实现字符串的部分复制

提示

函数 strmncpy 的原型为:

void strmncpy(char *s, int m, int n, char *t);

参数 s 指向源字符串,t 指向字符串复制的目标单元,函数功能为将 s 指向字符串从第 m 个(从0开始编号)字符开始的连续 n 个字符复制到 t 指向的存储单元;

如果第 m 个字符后面的字符数不足 n 个,则复制到 ‘\0’为止;

如果 s 的长度不到 m,则复制空串。

例如:

char *s = "abcdefghijklmn";
char t[20];
strmncpy(s,4,6,t);
cout << t << endl;

输出结果为:efghij

测试说明

测试输入:

abcdefghjkksdsd
5 7

预期输出:fghjkks

测试输入:

asdftyuioplkm
3 9

#include <iostream>
using namespace std;
void strmncpy(char* s, int m, int n, char* t);
int main()
{
    char s[128], t[128];
    int m, n;
    cin >> s;     // 输入源串
    cin >> m >> n;     // 输入m和n
    strmncpy(s, m, n, t);     // 字符串复制
    cout << t << endl;     // 输出复制结果
    return 0;
}
// 函数strmncpy:字符串的部分复制,将s指向字符串从第m个字符开始的n个字符复制的t中
// 参数:s-指向源字符串,t-指向目标字符串,m-起始位置,n-字符个数
// 返回值:无
void strmncpy(char* s, int m, int n, char* t)
{
    // 请在此添加代码,实现函数strmncpy
    /********** Begin *********/
    char* p = s;//这个用来跑
    char* q = t;//这个用来存
    int a = 0;//用于执行循环的次数
    p = p + m;//直接把地址改到目标数组的目标位置上去,最简单
    while (a < n)
    {
        *q++ = *p++;//把符合的值赋到用来存的指针这边
        a++;
    }
    *q = '\0';//结束,输出*q
    /********** End **********/
}

这是我想到最快的方法,希望我的代码可以帮到有需要的人

c++字符串复制/string、char*、char[]转换

1.char*转string:可以直接赋值。

2.char[]转string:可以直接赋值。

3.char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

4.string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

5.string转char*:调用string对象的c_str函数或data函数或copy函数。

6.char[]转char*:直接赋值即可。

主要列举下char*复制到char*

错误方法1:

char *a = char *b

错误原因:类型是指针,直接赋值会使两个指针指向同一个地址,改动一个另一个也会变。

错误方法2:

string a=char *b
char *c=a.data() //或者char *c=a.c_str()

错误原因:string.data()返回值是const char*类型,不是char*类型。

正确方法:

string a=char *b
char *c=(char*)a.data() //或者char *c=a.c_str()

其他方法:

  • strcpy:我用一直内存写入错误,如果你能用就直接用就行了。
  • const_cast:据说可以,没用过。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++写时拷贝实现原理及实例解析

    C++写时拷贝实现原理及实例解析

    这篇文章主要介绍了C++写时拷贝实现原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • C/C++ 单元自动化测试解决方案总结

    C/C++ 单元自动化测试解决方案总结

    这篇文章主要介绍了C/C++ 单元自动化测试解决方案总结,通过利用GCC插件来实现提升C/C++开发者的单元效率工具解决方案,希望对大家在提升单元测试效率上有所启发
    2022-06-06
  • 如何使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    如何使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    这篇文章主要介绍了使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • C++中的string库函数常见函数的作用和使用方法

    C++中的string库函数常见函数的作用和使用方法

    这篇文章主要介绍了C++中的string库函数常见函数的作用和使用方法,库函数的灵活应用是程序员的一大重要技能,本文通过实例实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-04-04
  • 盘点分析C语言中少见却强大的字符串函数

    盘点分析C语言中少见却强大的字符串函数

    这篇文章主要为大家盘点及分析C语言中少见却强大的字符串函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • OpenCV基于稠密光流实现视频跟踪详解

    OpenCV基于稠密光流实现视频跟踪详解

    这篇文章主要为大家详细介绍了OpenCV如何基于稠密光流实现视频跟踪功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • 使用代码验证linux子进程与父进程的关系

    使用代码验证linux子进程与父进程的关系

    Linux下父进程可以使用fork 函数创建子进程,但是当父进程先退出后,子进程会不会也退出呢?通过下面这个小实验,我们能够很好的看出来
    2014-02-02
  • C语言数据结构之线性表的链式存储结构

    C语言数据结构之线性表的链式存储结构

    线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列,这篇文章带你学习下线性表的链式存储结构
    2021-11-11
  • C语言实现文本编辑器系统

    C语言实现文本编辑器系统

    这篇文章主要为大家详细介绍了C语言实现文本编辑器系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • C++一个数组赋值给另一个数组方式

    C++一个数组赋值给另一个数组方式

    文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方法都有其适用的场景和注意事项
    2025-02-02

最新评论