C++如何實現(xiàn)字符串的部分復制
C++實現(xiàn)字符串的部分復制
提示
函數 strmncpy 的原型為:
void strmncpy(char *s, int m, int n, char *t);
參數 s 指向源字符串,t 指向字符串復制的目標單元,函數功能為將 s 指向字符串從第 m 個(從0開始編號)字符開始的連續(xù) 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)
{
// 請在此添加代碼,實現(xiàn)函數strmncpy
/********** Begin *********/
char* p = s;//這個用來跑
char* q = t;//這個用來存
int a = 0;//用于執(zhí)行循環(huán)的次數
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[]:不能直接賦值,可以循環(huán)char*字符串逐個字符賦值,也可以使用strcpy_s等函數。
4.string轉char[]:不能直接賦值,可以循環(huán)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:據說可以,沒用過。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
如何使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境
這篇文章主要介紹了使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07

