C++如何實(shí)現(xiàn)字符串的部分復(fù)制
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)文章
C++寫時(shí)拷貝實(shí)現(xiàn)原理及實(shí)例解析
這篇文章主要介紹了C++寫時(shí)拷貝實(shí)現(xiàn)原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06C/C++?單元自動(dòng)化測(cè)試解決方案總結(jié)
這篇文章主要介紹了C/C++?單元自動(dòng)化測(cè)試解決方案總結(jié),通過利用GCC插件來實(shí)現(xiàn)提升C/C++開發(fā)者的單元效率工具解決方案,希望對(duì)大家在提升單元測(cè)試效率上有所啟發(fā)2022-06-06如何使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境
這篇文章主要介紹了使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07C++中的string庫函數(shù)常見函數(shù)的作用和使用方法
這篇文章主要介紹了C++中的string庫函數(shù)常見函數(shù)的作用和使用方法,庫函數(shù)的靈活應(yīng)用是程序員的一大重要技能,本文通過實(shí)例實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-04-04盤點(diǎn)分析C語言中少見卻強(qiáng)大的字符串函數(shù)
這篇文章主要為大家盤點(diǎn)及分析C語言中少見卻強(qiáng)大的字符串函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02OpenCV基于稠密光流實(shí)現(xiàn)視頻跟蹤詳解
這篇文章主要為大家詳細(xì)介紹了OpenCV如何基于稠密光流實(shí)現(xiàn)視頻跟蹤功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-02-02使用代碼驗(yàn)證linux子進(jìn)程與父進(jìn)程的關(guān)系
Linux下父進(jìn)程可以使用fork 函數(shù)創(chuàng)建子進(jìn)程,但是當(dāng)父進(jìn)程先退出后,子進(jìn)程會(huì)不會(huì)也退出呢?通過下面這個(gè)小實(shí)驗(yàn),我們能夠很好的看出來2014-02-02C語言數(shù)據(jù)結(jié)構(gòu)之線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。線性表(linear list)是數(shù)據(jù)結(jié)構(gòu)的一種,一個(gè)線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列,這篇文章帶你學(xué)習(xí)下線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)2021-11-11C++一個(gè)數(shù)組賦值給另一個(gè)數(shù)組方式
文章介紹了三種在C++中將一個(gè)數(shù)組賦值給另一個(gè)數(shù)組的方法:使用循環(huán)逐個(gè)元素賦值、使用標(biāo)準(zhǔn)庫函數(shù)std::copy或std::memcpy以及使用標(biāo)準(zhǔn)庫容器,每種方法都有其適用的場(chǎng)景和注意事項(xiàng)2025-02-02