通常我們都是把字串存在一個陣列當中,但是我們卻不知到使用者到底會輸入多長的字串,只能宣告成一個非常大的陣列,這樣不但沒有解決問題而且還浪廢掉不少空間。
下面程式碼,是使用動態記憶體配置來即時更改陣列大小,當陣列不夠大時,變會將陣列長度增加 10。
//編譯器:Dev-C++ 4.9.9.2
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
int main()
{
char *ch,*tmp;
char in;
int count=10,num=0;
// count紀錄陣列大小 num紀錄用掉的空間
int a;
ch = new char [count];
in = getch();
while( in != 'r' )
{
if( num >= count ) // 檢查陣列是否過小
{
tmp = new char [count+10]; //建立比原本大10的陣列
for(a=0;a<count;a++) //複製舊的陣列內容
tmp[a] = ch[a];
delete [] ch; // 刪除舊的資料
ch = tmp; // 繼承新的資料
count+=10;
}
num++;
ch[num-1] = in;
cout<<ch[num-1];
in = getch();
}
ch[num] = ' ';
cout<<endl<<endl<<ch<<endl<<endl;
system("pause");
return 0;
}
程式執行時,會先讀入字串直到使用者按下 Enter,接下來會把使用者輸入的字串重新再印出來。另外程式是使用 getch() 來讀取字串輸入,所以不必擔心作業系統給的暫存不夠大。
conio.h不是標準函式庫哦~~
另外,在宣告陣列長度時使用變數
不是非常好的做法
似乎只有C99的編譯器會過
抱歉,我應該一次回完的
偷用其他函式庫被發現了 XD
不用說也大概我要用 conio.h 裡面的哪個函式了
我不太清楚其他編譯器會不會過,但是我用的 GCC 當編譯器,所以其他編譯器應該還OK。
呵呵,或許是我多話了,改用C++ Style String 如何 ?
哈,小弟不專業,受教受教!
真是受教了,真是及时雨啊,谢谢