欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++如何實(shí)現(xiàn)字符串的部分復(fù)制

 更新時(shí)間:2023年08月14日 10:17:49   作者:CNDaisy  
這篇文章主要介紹了C++如何實(shí)現(xiàn)字符串的部分復(fù)制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++實(shí)現(xiàn)字符串的部分復(fù)制

提示

函數(shù) strmncpy 的原型為:

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

參數(shù) s 指向源字符串,t 指向字符串復(fù)制的目標(biāo)單元,函數(shù)功能為將 s 指向字符串從第 m 個(gè)(從0開始編號(hào))字符開始的連續(xù) n 個(gè)字符復(fù)制到 t 指向的存儲(chǔ)單元;

如果第 m 個(gè)字符后面的字符數(shù)不足 n 個(gè),則復(fù)制到 ‘\0’為止;

如果 s 的長度不到 m,則復(fù)制空串。

例如:

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

輸出結(jié)果為:efghij

測(cè)試說明

測(cè)試輸入:

abcdefghjkksdsd
5 7

預(yù)期輸出:fghjkks

測(cè)試輸入:

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);     // 字符串復(fù)制
    cout << t << endl;     // 輸出復(fù)制結(jié)果
    return 0;
}
// 函數(shù)strmncpy:字符串的部分復(fù)制,將s指向字符串從第m個(gè)字符開始的n個(gè)字符復(fù)制的t中
// 參數(shù):s-指向源字符串,t-指向目標(biāo)字符串,m-起始位置,n-字符個(gè)數(shù)
// 返回值:無
void strmncpy(char* s, int m, int n, char* t)
{
    // 請(qǐng)?jiān)诖颂砑哟a,實(shí)現(xiàn)函數(shù)strmncpy
    /********** Begin *********/
    char* p = s;//這個(gè)用來跑
    char* q = t;//這個(gè)用來存
    int a = 0;//用于執(zhí)行循環(huán)的次數(shù)
    p = p + m;//直接把地址改到目標(biāo)數(shù)組的目標(biāo)位置上去,最簡單
    while (a < n)
    {
        *q++ = *p++;//把符合的值賦到用來存的指針這邊
        a++;
    }
    *q = '\0';//結(jié)束,輸出*q
    /********** End **********/
}

這是我想到最快的方法,希望我的代碼可以幫到有需要的人

c++字符串復(fù)制/string、char*、char[]轉(zhuǎn)換

1.char*轉(zhuǎn)string:可以直接賦值。

2.char[]轉(zhuǎn)string:可以直接賦值。

3.char*轉(zhuǎn)char[]:不能直接賦值,可以循環(huán)char*字符串逐個(gè)字符賦值,也可以使用strcpy_s等函數(shù)。

4.string轉(zhuǎn)char[]:不能直接賦值,可以循環(huán)char*字符串逐個(gè)字符賦值,也可以使用strcpy_s等函數(shù)。

5.string轉(zhuǎn)char*:調(diào)用string對(duì)象的c_str函數(shù)或data函數(shù)或copy函數(shù)。

6.char[]轉(zhuǎn)char*:直接賦值即可。

主要列舉下char*復(fù)制到char*

錯(cuò)誤方法1:

char *a = char *b

錯(cuò)誤原因:類型是指針,直接賦值會(huì)使兩個(gè)指針指向同一個(gè)地址,改動(dòng)一個(gè)另一個(gè)也會(huì)變。

錯(cuò)誤方法2:

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

錯(cuò)誤原因:string.data()返回值是const char*類型,不是char*類型。

正確方法:

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

其他方法:

  • strcpy:我用一直內(nèi)存寫入錯(cuò)誤,如果你能用就直接用就行了。
  • const_cast:據(jù)說可以,沒用過。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論