通常我們都是把字串存在一個陣列當中,但是我們卻不知到使用者到底會輸入多長的字串,只能宣告成一個非常大的陣列,這樣不但沒有解決問題而且還浪廢掉不少空間。
下面程式碼,是使用動態記憶體配置來即時更改陣列大小,當陣列不夠大時,變會將陣列長度增加 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 如何 ?
哈,小弟不專業,受教受教!
真是受教了,真是及时雨啊,谢谢