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语言实现军旗游戏,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-11-11
  • C语言数组学习之特殊矩阵的压缩存储

    C语言数组学习之特殊矩阵的压缩存储

    矩阵在计算机图形学、工程计算中都占有举足轻重的地位,本文将讨论如何将矩阵更有效地存储在内存中,并且能够方便地提取矩阵中的元素。感兴趣的同学可以了解一下
    2021-12-12
  • C++ 多态虚函数的底层原理深入理解

    C++ 多态虚函数的底层原理深入理解

    这篇文章主要介绍了C++ 多态虚函数的底层原理深入理解,多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为,通常是父类调用子类的重写函数,在C++中就是 父类指针指向子类对象,此时父类指针的向下引用就可以实现多态
    2022-08-08
  • C语言函数栈帧的创建与销毁详解

    C语言函数栈帧的创建与销毁详解

    函数栈帧(stack frame)就是函数调用过程中在程序的调用栈(call stack)所开辟的空间,下面这篇文章主要给大家介绍了关于C语言函数栈帧的创建与销毁的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 简单谈谈C++中指针与引用的区别

    简单谈谈C++中指针与引用的区别

    指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法
    2017-04-04
  • C++实现LeetCode(8.字符串转为整数)

    C++实现LeetCode(8.字符串转为整数)

    这篇文章主要介绍了C++实现LeetCode(8.字符串转为整数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中AVL树的底层以及实现方法总结

    C++中AVL树的底层以及实现方法总结

    这篇文章主要介绍了C++中AVL树的底层以及实现方法的相关资料,AVL树是一种自平衡的二叉搜索树,每个节点的左右子树高度差不超过1,通过旋转操作保持平衡,详解了AVL树的结构、插入、旋转、查找和遍历方法,展示了其保持平衡的机制及对应代码实现,需要的朋友可以参考下
    2024-10-10
  • C++中POCO库的安装与基础知识介绍(Windwos和Linux)

    C++中POCO库的安装与基础知识介绍(Windwos和Linux)

    这篇文章主要为大家介绍了C++ POCO库的简单介绍、下载以及安装方式、简单代码示例,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-05-05
  • QML与C++交互的实现步骤

    QML与C++交互的实现步骤

    本文主要介绍了QML与C++交互的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++如何使用new来初始化指向类的指针

    C++如何使用new来初始化指向类的指针

    这篇文章主要介绍了C++如何使用new来初始化指向类的指针问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论