C++如何實現(xiàn)字符串的部分復(fù)制
C++實現(xiàn)字符串的部分復(fù)制
提示
函數(shù) strmncpy 的原型為:
void strmncpy(char *s, int m, int n, char *t);
參數(shù) s 指向源字符串,t 指向字符串復(fù)制的目標(biāo)單元,函數(shù)功能為將 s 指向字符串從第 m 個(從0開始編號)字符開始的連續(xù) n 個字符復(fù)制到 t 指向的存儲單元;
如果第 m 個字符后面的字符數(shù)不足 n 個,則復(fù)制到 ‘\0’為止;
如果 s 的長度不到 m,則復(fù)制空串。
例如:
char *s = "abcdefghijklmn"; char t[20]; strmncpy(s,4,6,t); cout << t << endl;
輸出結(jié)果為:efghij
測試說明
測試輸入:
abcdefghjkksdsd
5 7
預(yù)期輸出: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); // 字符串復(fù)制 cout << t << endl; // 輸出復(fù)制結(jié)果 return 0; } // 函數(shù)strmncpy:字符串的部分復(fù)制,將s指向字符串從第m個字符開始的n個字符復(fù)制的t中 // 參數(shù):s-指向源字符串,t-指向目標(biāo)字符串,m-起始位置,n-字符個數(shù) // 返回值:無 void strmncpy(char* s, int m, int n, char* t) { // 請在此添加代碼,實現(xiàn)函數(shù)strmncpy /********** Begin *********/ char* p = s;//這個用來跑 char* q = t;//這個用來存 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*字符串逐個字符賦值,也可以使用strcpy_s等函數(shù)。
4.string轉(zhuǎn)char[]:不能直接賦值,可以循環(huán)char*字符串逐個字符賦值,也可以使用strcpy_s等函數(shù)。
5.string轉(zhuǎn)char*:調(diào)用string對象的c_str函數(shù)或data函數(shù)或copy函數(shù)。
6.char[]轉(zhuǎn)char*:直接賦值即可。
主要列舉下char*復(fù)制到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
:我用一直內(nèi)存寫入錯誤,如果你能用就直接用就行了。const_cast
:據(jù)說可以,沒用過。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境
這篇文章主要介紹了使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07C++中的string庫函數(shù)常見函數(shù)的作用和使用方法
這篇文章主要介紹了C++中的string庫函數(shù)常見函數(shù)的作用和使用方法,庫函數(shù)的靈活應(yīng)用是程序員的一大重要技能,本文通過實例實例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-04-04盤點(diǎn)分析C語言中少見卻強(qiáng)大的字符串函數(shù)
這篇文章主要為大家盤點(diǎn)及分析C語言中少見卻強(qiáng)大的字符串函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02使用代碼驗證linux子進(jìn)程與父進(jìn)程的關(guān)系
Linux下父進(jìn)程可以使用fork 函數(shù)創(chuàng)建子進(jìn)程,但是當(dāng)父進(jìn)程先退出后,子進(jìn)程會不會也退出呢?通過下面這個小實驗,我們能夠很好的看出來2014-02-02C語言數(shù)據(jù)結(jié)構(gòu)之線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)
線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。線性表(linear list)是數(shù)據(jù)結(jié)構(gòu)的一種,一個線性表是n個具有相同特性的數(shù)據(jù)元素的有限序列,這篇文章帶你學(xué)習(xí)下線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)2021-11-11