- 到現在學習c++接近3個月,但是感覺水平從數組之后就停滯了。有些點大致是能懂的,但是自己實際操作就會很無從下手,模糊的點太多,需要從許多細小的點開始學習。冒泡排序法還是不太能完整打出來,結構體也是,大體是知道,但是總是會有各種理解上的偏差,比如統計學生平均成績和及格人數,總是有點搞不清它們的順序。還有指針的應用例如字符串復制,需要再多看課本仔細看細節。之前還經常搞錯聲明和定義,現在懂了。
2. 題目如下:
6-1 字符串復制 (10 分)
本題要求編寫函數,將輸入字符串t中從第m個字符開始的全部字符復制到字符串s中。
函數接口定義:
void strmcpy( char *t, int m, char *s );
函數strmcpy將輸入字符串char *t中從第m個字符開始的全部字符復制到字符串char *s中。若m超過輸入字符串的長度,則結果字符串應為空串。
裁判測試程序樣例:
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 20
void strmcpy( char *t, int m, char *s );
int main()
{
char t[MAXN], s[MAXN];
int m;
cin>>m;
cin.ignore();
cin.getline(t,MAXN);
strmcpy(t,m,s);
cout<<s;
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
7
happy new year
輸出樣例:
new year
答案:
解題思路:
聲明題中的函數,數一共幾個字符,然后判斷是否有意義。如果有意義,將t中第m個字符之后的復制至s,最后加入'\0';如果沒意義返回空值,最后返回原函數。
代碼思路:
設計兩個指針分別指向不同的地址(兩個數組),當輸入的數n大於輸入字符長度時,則返回空值,否則,從一個數組中第n個數開始拷貝至第二個數組。
核心技術總結:
復制尋找的過程。
問題及解決:
開始不懂getline的用法,后來找了資料;把聲明和定義弄混了,聲明是語句后面要加分號。覺得這道題看起來簡單但是自己寫總是很多問題,指向空值要用指針。