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 個(從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)
{
// 請?jiān)诖颂砑哟a,實(shí)現(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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言數(shù)組學(xué)習(xí)之特殊矩陣的壓縮存儲
矩陣在計(jì)算機(jī)圖形學(xué)、工程計(jì)算中都占有舉足輕重的地位,本文將討論如何將矩陣更有效地存儲在內(nèi)存中,并且能夠方便地提取矩陣中的元素。感興趣的同學(xué)可以了解一下2021-12-12
C++實(shí)現(xiàn)LeetCode(8.字符串轉(zhuǎn)為整數(shù))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(8.字符串轉(zhuǎn)為整數(shù)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++中AVL樹的底層以及實(shí)現(xiàn)方法總結(jié)
這篇文章主要介紹了C++中AVL樹的底層以及實(shí)現(xiàn)方法的相關(guān)資料,AVL樹是一種自平衡的二叉搜索樹,每個節(jié)點(diǎn)的左右子樹高度差不超過1,通過旋轉(zhuǎn)操作保持平衡,詳解了AVL樹的結(jié)構(gòu)、插入、旋轉(zhuǎn)、查找和遍歷方法,展示了其保持平衡的機(jī)制及對應(yīng)代碼實(shí)現(xiàn),需要的朋友可以參考下2024-10-10
C++中POCO庫的安裝與基礎(chǔ)知識介紹(Windwos和Linux)
這篇文章主要為大家介紹了C++ POCO庫的簡單介紹、下載以及安裝方式、簡單代碼示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-05-05

