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:据说可以,没用过。

总结

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

相关文章

  • 利用Matlab绘制优美的k线图

    利用Matlab绘制优美的k线图

    本期又是一个花里胡哨的数据可视化,前两天刷到了耐克的视觉设计师Gladys Orteza绘制的k线图作品,把沉闷的股票图变成了精彩的风景,但是那些大部分是真的完全看不清,我这里挑选了几个能看清的k线图风格将其用MATLAB进行了实现
    2022-10-10
  • C++ 空指针解引用的解决方法

    C++ 空指针解引用的解决方法

    空指针解引用是一种常见且严重的错误,它通常由于指针未初始化、被设置为nullptr或指向无效地址引起,本文主要介绍了C++ 空指针解引用的解决方法,感兴趣的可以了解一下
    2024-08-08
  • C++编程中队内联函数的理解和使用

    C++编程中队内联函数的理解和使用

    这篇文章主要介绍了C++编程中队内联函数的理解和使用,简单举例讲解了inline关键字引出的内联函数的相关知识,需要的朋友可以参考下
    2016-01-01
  • C/C++ 中实现让控制台暂停的方法

    C/C++ 中实现让控制台暂停的方法

    这篇文章主要介绍了C/C++ 中实现让控制台暂停的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • VC++ 中ListCtrl经验总结

    VC++ 中ListCtrl经验总结

    这篇文章主要介绍了VC++ 中ListCtrl经验总结的相关资料,需要的朋友可以参考下
    2015-06-06
  • C语言实例讲解嵌套语句的用法

    C语言实例讲解嵌套语句的用法

    所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里 面还有 while,或者 for 里面有 while,while 里面有 if-else,这都是允许的
    2022-05-05
  • C语言数据的存储超详细讲解中篇练习

    C语言数据的存储超详细讲解中篇练习

    使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么
    2022-04-04
  • VC实现ODBC数据库操作实例解析

    VC实现ODBC数据库操作实例解析

    这篇文章主要介绍了VC实现ODBC数据库操作的方法,非常有实用价值,需要的朋友可以参考下
    2014-07-07
  • C/C++实现segy文件的读取详解

    C/C++实现segy文件的读取详解

    SEGY是地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储。标准SEGY文件一般包括三部分:卷头、道头与地震道数据。本文将介绍利用C++读取segy文件的方法,感兴趣的可以了解一下
    2022-03-03
  • C/C++中的内存管理小结

    C/C++中的内存管理小结

    这篇文章主要介绍了C/C++中的内存管理小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论