最近朋友的電腦開不了機,上網查了一下,覺得這些資料或許可以幫的上忙:
AWARD BIOS
----------------------
1短:系統啟動正常。
2短:CMOS設定錯誤。
一長一短:DRAM錯誤。
一長二短:顯示卡或螢幕連接錯誤。
一長三短:AGP 錯誤。
一長九短:ROM錯誤。
不斷長響:DRAM未插好。
不停急響:電源有問題。
AMI BIOS
-----------------------
1短:DRAM篞s錯誤。
2短:DRAM 同位元檢查錯誤。
3短:基本64K RAM檢查失敗。
4短:計時器無法運算。
5短:CPU錯誤。
6短:8042無法取得A20(檢查鍵盤)。
7短:CPU中斷錯誤
8短:顯示卡記憶體寫入讀取錯誤(檢查顯示卡)。
9短:ROM檢查碼錯誤。
10短:CMOS 關機暫存器寫入讀取錯誤。
11短:快取記憶體故障。
Phoenix BIOS
----------------------
1短:系統啟動正常
1短1短1短:系統開機初始化失敗
1短1短2短:主機板錯誤
1短1短3短:CMOS或電池失效
1短1短4短:ROM BIOS校驗錯誤
1短4短3短:EISA時序器錯誤
1短3短1短:RAM復新錯誤
3短1短2短:主DMA暫存器錯誤
3短1短3短:主中斷處理暫存器錯誤
3短2短4短:主機板鍵盤控制器錯誤
3短4短2短:顯示錯誤(顯示器或顯示卡)
4短2短2短:關機錯誤
4短4短1短:串列埠錯誤
4短4短2短:並列埠錯誤
IBM BIOS
---------------------------------------
無:電源供應器或主機板完全損壞
持續:主機板嚴重損壞
短聲:系統自我測試,情況正常
2短聲:自我測試發現錯誤 ( 錯誤訊息顯示於螢幕上 )
持續短聲:電源供應器或主機板損壞
1長1短:主機板有錯誤
1長2短:顯示卡錯誤
1長3短:顯示卡錯誤
3長:鍵盤錯誤
2013年5月26日 星期日
2013年5月24日 星期五
HTC One 全球已賣出500萬支 仍供不應求!
科技網站《SlashGear》周四 (23日) 報導,宏達電 (HTC)(2498-TW) 一位公司高層確認,HTC One 手機自從 3 月發售至今,已於全球創下 500 萬支的亮麗銷售佳績,且目前需求明顯仍高於供給量。
宏達電近期消息讓公司蒙上陰影,近日傳出高層出走潮,且對打 Galaxy S4 手機成績上仍有差距,但根據《華爾街日報》指出,該名宏達電高層稱 HTC One 銷售實為強勁。
該人士稱:「訂單數量目前為止都非常好,且仍超過我們的供給量。雖然這有部份原因是來自零件短缺,但這問題下個月可獲得解決,到時候就可以看到 HTC One 的真正光芒。」
宏達電已公開宣稱,本月生產量將調昇一倍,4 月銷售數據也樂觀上揚。HTC One 原本打算在今 (2013) 年第 1 季末尾前,於全球 80 個國家開賣,但報導稱「UltraPixe」攝影鏡頭零件採購上有些問題,因此發售的市場範圍受到限制。
但這並不影響宏達電的第 2 季強勁銷量預期,目前季度的營收估計將上達約 700 億新台幣 (24 億美元),增長幅度幾乎高達 10 億美元。
原文網址: 表現亮眼!HTC One全球已賣出500萬支 仍供不應求 | 財經新聞 | NOWnews 今日新聞網 http://www.nownews.com/2013/05/23/320-2942591.htm#ixzz2UCDhHsjv
2013年5月23日 星期四
SVN :: 如何無條件還原到舊的revision
當團隊一起開發程式,有很多人選擇用SVN來做版本控制,當程式開發人員不小心上傳錯誤的程式碼導致project無法build的時候,最後的選擇可以還原到之前好的版本,作法如下:
情境 : 版本號 4058 (現存最新版,但是是錯的),想還原到 版本號 4020
做法:
情境 : 版本號 4058 (現存最新版,但是是錯的),想還原到 版本號 4020
做法:
- 在local端創一個資料夾 A 並checkout 版本號 4058
- 在local端創一個資料夾 B 並checkout 版本號 4020
- 資料夾檔案設定選擇 "顯示所有檔案"
- 把資料夾 B 裡的檔案,除了.svn (記錄了svn的資訊) 這個資料夾外,全選並複製貼到資料夾A,全部覆蓋
- commit資料夾A
- 完成版本復原
2013年5月22日 星期三
Android :: 偵測網路狀態
有些程式必須透過網路來執行某些動作,在執行這類網路相依的動作之前,最好先判斷目前的網路連線狀態,這樣可以免掉後續許多的防範機制,相關程式碼如下:
private boolean isInternetConnected( )
{
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService
(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo= connectivityManager .getActiveNetworkInfo();
if( networkInfo != null && networkInfo.isConnected( ) )
{
return true;
}
else
{
return false;
}
}
補充:
記得在AndroidManifest.xml裡加入
private boolean isInternetConnected( )
{
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService
(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo= connectivityManager .getActiveNetworkInfo();
if( networkInfo != null && networkInfo.isConnected( ) )
{
return true;
}
else
{
return false;
}
}
補充:
記得在AndroidManifest.xml裡加入
Android :: 生命週期 lifecycle
Android 跟 一般windows的程式不一樣,他引進了所謂的lifecycle的概念,針對程式而言,最明顯的不同在於您所設計的程式,有可能被系統自動終結掉,這對於傳統的程式設計師或使用者來說是很不可思議的事,以前,除非是程式自己結束(正常或不正常),不然是不會自動消失的,Android系統則完全掌控了程式的生殺大權,當記憶體不足或其他原因,系統是可以無責的將您的程式給結束掉的,後來,Win8也導入lifecycle。
Android的lifecycle分為幾個階段,用程式來看就一目了然了:
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
底下是擷取自Android官方網站的流程圖:
Android的lifecycle分為幾個階段,用程式來看就一目了然了:
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
底下是擷取自Android官方網站的流程圖:
Android :: 非同步線程 AsyncTask
網路上很多AsyncTask的說明和例子,但我相信應該有很多初學者應該都有看沒有懂,
如果您是已經看過網路上的例子但還是不會用的話,
可以看看以下的例子,
這篇文章的主要目的,
是要您能真的用得出來,
實作成功了,
再去查相關資料,
成就感就不同了!
如果您有以下的需求:
事件2必須等待事件1完成後再做的話,
您就有AsyncTask實作的動機了。
首先,設計一個名子叫做MyTask的class,其他照抄。
doInBackground裡面放的就是要做的事件1,
而onPostExecute裡面放的就是事件2,
class實作結束!!!
class MyTask extends AsyncTask{
@Override
protected voiddoInBackground(Integer... params) {
事件1;
}
@Override
protected void onPostExecute(String result) {
事件2;
super.onPostExecute(result);
}
}
再來,就是在MainThread裡面呼叫了,
可以在OnCreate裡面做:
MyTask myTask = new MyTask();
myTask(100);
結束了!!
Android :: 對話方塊
對話方塊,和之前介紹過的Toast一樣,是用來通知使用者的,但要注意其應用情境,有些區別,這邊就不多說了,google上資料應該很多。
Android的對話方塊實作也是很簡單,以下照慣例,用程式碼來解說:
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
首先是產生一個AlertDialog實體,這個實體要出現在哪裡呢?一般來說就是這段程式碼鎖在的Activity,預設就是MainActivity.this。
dialog.setTitle("關於 dialog");
這是設置dialog標題的用法。
dialog.setMessage("message content");
這是設置dialog內容的用法。
dialog.show();
這是最後一個步驟了,就是把dialog給show出來。
結束。
coupon
- 1129
- http://www.kfcclub.com.tw/Menu/Coupon/
- http://campaign.mcdonalds.com.tw/Campaign_20130828_Coupon/
- https://docs.google.com/document/d/1oau68PPEY5jk0UJBfPgzkdbpaEwq7UDIxddNsHqpu1M/edit?usp=sharing
- http://www.mos.com.tw/index.aspx
- https://docs.google.com/document/d/16cU9-ieaNONMNd4bQtHkD_RvYAQPBUzcquogpe0WhSU/pub
- http://www.burgerking.com.tw/news.php?id=208
- https://docs.google.com/document/d/1hkW58Vwiz-Wi4wPSmg7la7b3I3cOjGmYSXHAgjcFIo8/edit?usp=sharing
- http://www.pec21c.com.tw/ctmNewsList.html?leftMenuId=2800
- http://www.tkkinc.com.tw/news_1.asp?n=1
- http://www.twsubway.com/www/include/index.php?Page=2
- https://docs.google.com/document/d/1mVc9c2Bw8cDMf9JO6p1syRRiFJjLFZ7c2wxn3NLrpQg/pub
- http://www.coldstone.com.tw/04_news.asp
- https://docs.google.com/document/d/1dqL_wtma82-nxqS9oMU46BplwmH-aNW6Qykm83OAqSw/pub
- https://docs.google.com/document/d/1dqL_wtma82-nxqS9oMU46BplwmH-aNW6Qykm83OAqSw/edit?usp=sharing
- http://www.starbucks.com.tw/stores/allevent/stores_allevent.jspx
- https://docs.google.com/document/d/1ghWc4OmNiibSI-l0JywSZweV3IJs-eudEpzB-7naW_w/pub
- https://docs.google.com/document/d/1ghWc4OmNiibSI-l0JywSZweV3IJs-eudEpzB-7naW_w/edit?usp=sharing
- https://www.mrbrown.com.tw/news/index.aspx
- https://docs.google.com/document/d/1x4M73_TqoipjRFnx5NsbNpphN-_3oPNLFDIVk-PF-Xk/pub
- http://www.85cafe.com/newsactivity.php
- https://www.sushiexpress.com.tw/news
- http://www.sushiexpress.com.tw/qrcode/view.php?id=209
- http://www.pizzahut.com.tw/promotions/#pwds
- https://docs.google.com/document/d/1xA3auHeUnYxAZeAYxElXkbVXYBgoGd2n5ICY7gcCVzo/pub
- https://docs.google.com/document/d/1xA3auHeUnYxAZeAYxElXkbVXYBgoGd2n5ICY7gcCVzo/edit?usp=sharing
- http://www.dominos.com.tw/Phone/PhoneHome.aspx
- https://www.0800076666.com.tw/Info/InfoSets
- http://www.carrefour.com.tw/promo-catalogs
- http://www.pxmart.com.tw/px/edmindex.px?id=3666#features/5
2013年5月21日 星期二
Android :: 開啟程式Internet permission
在設計Android程式時,有些存取Internet的程式法,需要事先開啟Internet Permission,否則會出現Internet Permission Deny的Exception,要如何開啟程式的Internet Permission,很簡單,只要將以下的程式碼:
加入到 AndroidManifest.xml 檔案中,記得,這句必須在 及 中間,且自己為root node。
加入到 AndroidManifest.xml 檔案中,記得,這句必須在
2013年5月19日 星期日
(Android) 新增頁面
以下解說如何新增一個名為NewActivity的頁面,需要準備的工作有:
(1). 產生需要的檔案: NewActivity.java 及 NewActivity.xml
在NewActivity.java的OnCreate( )加入: setContentView(R.layout.NewActivity);
(2). 在 AndroidManifest.xml 裡加入:
(3). 在欲連結到NewActivity的頁面裡,加入對應的程式碼,使之可以連結到NewActivity:
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
startActivity(intent);
可以把(3)放到一個Button的Onclick事件裡,就可以很容易的看出結果了。
(1). 產生需要的檔案: NewActivity.java 及 NewActivity.xml
在NewActivity.java的OnCreate( )加入: setContentView(R.layout.NewActivity);
(2). 在 AndroidManifest.xml 裡加入:
(3). 在欲連結到NewActivity的頁面裡,加入對應的程式碼,使之可以連結到NewActivity:
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
startActivity(intent);
可以把(3)放到一個Button的Onclick事件裡,就可以很容易的看出結果了。
(Android) 造訪網頁
Android 瀏覽網頁非常簡單,只需要幾行的程式碼,以下的範例是當使用者按下按鈕後,會連結到特定網頁的寫法:
// 與UI拉好的button (id : myInternet) 作連結
button_Internet= (Button)findViewById(R.id.myInternet);
button_Internet.setOnClickListener(buttonInternet);
private Button.OnClickListener buttonInternet = new Button.OnClickListener( )
{
Uri uri = Uri.parse("http://cte-ccu.blogspot.tw/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
};
// 與UI拉好的button (id : myInternet) 作連結
button_Internet= (Button)findViewById(R.id.myInternet);
button_Internet.setOnClickListener(buttonInternet);
private Button.OnClickListener buttonInternet = new Button.OnClickListener( )
{
Uri uri = Uri.parse("http://cte-ccu.blogspot.tw/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
};
(Android) 如何產生Toast 訊息
Toast訊息和一般的對話方塊訊息最大的不同在於應用情境,通常對話方塊式訊息出現後,畫面會focus在對話方塊,並等待使用者下一步指示,譬如按對話方塊上的確定或取消等等按鈕,而Toast則是將訊息顯示在螢幕上,經過一定時間後會自動消失,在盡量不打擾使用者的前提下達到訊息通知的目的,以下將用範例說明如何使用Toast:(按一個按鈕後出現Toast):
在UI配置上,拉一個按鈕,id設為about,
在欲顯示Toast的頁面程式碼裡(預設為MainActivity.java),加入以下程式碼:
// 產生一個按鈕 button_about ,並與 UI 拉好的按鈕 "about" 作連結
button_Toast = (Button)findViewById(R.id.about);
button_Toast .setOnClickListener(aboutToast);
private Button.OnClickListener aboutToast= new Button.OnClickListener( )
{
public void onClick(View arg0){
Toast popMsg = Toast.makeText(MainActivity.this, R.string.bmi_about, Toast.LENGTH_SHORT);
popMsg.show();
}
};
在UI配置上,拉一個按鈕,id設為about,
在欲顯示Toast的頁面程式碼裡(預設為MainActivity.java),加入以下程式碼:
// 產生一個按鈕 button_about ,並與 UI 拉好的按鈕 "about" 作連結
button_Toast = (Button)findViewById(R.id.about);
button_Toast .setOnClickListener(aboutToast);
private Button.OnClickListener aboutToast= new Button.OnClickListener( )
{
public void onClick(View arg0){
Toast popMsg = Toast.makeText(MainActivity.this, R.string.bmi_about, Toast.LENGTH_SHORT);
popMsg.show();
}
};
2013年5月13日 星期一
(C++) 支配值數目
已知兩已排序陣列,求第一個陣列元素比第二個陣列元素大的個數總和。
#include < iostream >
using namespace std;
int GreateCount(int f[], int g[], int numf, int numg)
{
int length = 0;
int sum = 0;
for(int i = 0; i < numf; ++i)
{
while(length < numg)
{
if(f[i] > g[0 + length])
length++;
else
break;
}
sum += length;
}
return sum;
}
int main(void)
{
int f[] = {1, 3, 5, 7, 9, 10, 11};
int g[] = {2, 3, 4, 7, 8};
int sum = GreateCount(f, g, 7, 5);
cout << "Sum = " << sum << endl;
}
#include < iostream >
using namespace std;
int GreateCount(int f[], int g[], int numf, int numg)
{
int length = 0;
int sum = 0;
for(int i = 0; i < numf; ++i)
{
while(length < numg)
{
if(f[i] > g[0 + length])
length++;
else
break;
}
sum += length;
}
return sum;
}
int main(void)
{
int f[] = {1, 3, 5, 7, 9, 10, 11};
int g[] = {2, 3, 4, 7, 8};
int sum = GreateCount(f, g, 7, 5);
cout << "Sum = " << sum << endl;
}
2013年5月12日 星期日
(C++) 找出最長平台的長度,並將之印出
在一個已經排序好的數字陣列,找出最常的平台並將之印出,所謂最常的平台,譬如一個陣列為1, 2, 2, 3, 3, 3, 4, 5, 5, 6,其中3, 3, 3即為此陣列的最常平台。
#include < iostream >
#include < vector >
using namespace std;
int longest_plateau(vector::iterator itr, vector::iterator itrEnd, int& number)
{
int length = 1;
for(itr += 1; itr != itrEnd; ++itr)
{
if(*itr == *(itr - length))
{
number = *itr;
++length;
}
}
return length;
}
int main(void)
{
int arrayNumbers[] = {1, 2, 2, 3, 3, 3, 4, 5, 5, 6};
vector numbers(arrayNumbers, arrayNumbers + 10);
int number = 0;
int length = longest_plateau(numbers.begin(), numbers.end(), number);
for(int i = 0; i < length; ++i)
cout << number << " ";
}
#include < iostream >
#include < vector >
using namespace std;
int longest_plateau(vector
{
int length = 1;
for(itr += 1; itr != itrEnd; ++itr)
{
if(*itr == *(itr - length))
{
number = *itr;
++length;
}
}
return length;
}
int main(void)
{
int arrayNumbers[] = {1, 2, 2, 3, 3, 3, 4, 5, 5, 6};
vector
int number = 0;
int length = longest_plateau(numbers.begin(), numbers.end(), number);
for(int i = 0; i < length; ++i)
cout << number << " ";
}
2013年5月9日 星期四
(C++) 淺談指標
C語言用 " * " 來宣告一個指標型態的變數,例如,想要宣告一個指向int的指標可以這樣做 : int* intPtr; intPtr是用來指向一個int變數的指標,intPtr儲存的是int變數的位址,而這個位址所對應到的地址所存的變數值,可以用*intPtr來表示。 例子:
#include < iostream >
void main( )
{
int var = 10;
int* intPtr = &var ;
std::cout << "變數var的位址:" << intPtr << std::endl;
std::cout << "指標intPtr所指向的變數的值:" << *intPtr << std::endl;
}
剛開始我們會被指標搞得頭暈腦脹,主要是因為指標在宣告時期和使用時期非常類似,但又不完全相同,在宣告時期,筆者習慣寫成(注意星號的位置)
int* intPtr;
而不是
int *intPtr;
宣告成int* intPtr; 筆者認為更貼近於指標所隱含的意思 -> intPtr是一種指向int型態變數的指標。
既然intPtr是一種指標,不同於一般的變數如 int intVal; 其中intVal是一個型態為int的變數,變數所存的內容是變數值,而指標所存的值則是"位址",例如:
intPtr = &intVal;
則intPtr這個指標所存的值是intVal變數的地址,有了地址,要如何找到intVal所存的變數呢?答案就是要靠 " * "來取值,也就是 *intPtr。
簡單來說,除了宣告時期,當你在程式內容中看到沒跟" * "搭配出現的指標變數,他是想表達"位址",而與" * "搭配一起出現的指標變數,他想表達的是他所存的地址所指向的變數值(可能是另一指標所存的地址,這就是雙重指標的意義)。
(C++) 使用不定長度引數之函式
不定個數引數之函式,顧名思義,就是一個可以餵不定個數引數的函式,引數可以3個、6個、9個等等,要使用不定個數引數,必須加入標頭檔 : #include
提供了幾個可使用的巨集,用以實現不定個數引數
va_list : 在va_start、 va_arg與va_end三個巨集使用時當作參數使用。
va_start : 開始不定長度引數的巨集。
va_arg : 讀取不定長度引數的巨集。
va_end : 結束不定長度引數的巨集。
範例如下:
#include
#include
void test(int argNum, ...)
{
va_list argList;
va_start(argList, argNum);
for(int i = 0; i < argNum; ++i)
std::cout << va_arg(argList, double) << std::endl;
va_end(argList);
}
void main( )
{
double a = 1.02, b = 3.22, c = 5.22;
double d = 2.22, e = 8.98, f = 0.99;
test(3, a, b, c);
test(6, a, b, c, d, e, f);
}
提供了幾個可使用的巨集,用以實現不定個數引數
va_list : 在va_start、 va_arg與va_end三個巨集使用時當作參數使用。
va_start : 開始不定長度引數的巨集。
va_arg : 讀取不定長度引數的巨集。
va_end : 結束不定長度引數的巨集。
範例如下:
#include
#include
void test(int argNum, ...)
{
va_list argList;
va_start(argList, argNum);
for(int i = 0; i < argNum; ++i)
std::cout << va_arg(argList, double) << std::endl;
va_end(argList);
}
void main( )
{
double a = 1.02, b = 3.22, c = 5.22;
double d = 2.22, e = 8.98, f = 0.99;
test(3, a, b, c);
test(6, a, b, c, d, e, f);
}
2013年5月8日 星期三
(C++) 輸入字串控制 - 數字篇
如果有一個地方可以讓使用者輸入,而且限制只能輸入數字型態,數字型態包括了正負數及小數,可以參考以下方法:
當使用者每件入一個按鍵,就呼叫此function:
void __fastcall OnEditPress(TObject *Sender, wchar_t &Key)
{
std::wstring numerics(L"0123456789");
TEdit *EditExit = (TEdit*)Sender;
std::wstring editString = EditExit->Text.c_str();
if((Key < L'0' || Key > L'9') && Key != L'\b' && Key != L'.' && Key != L'-')
{
Key = 0;
return;
}
// avoid ".3"
bool pointErrorUsing = (editString.find_first_of(L'.') != std::wstring::npos)
|| (editString.find_first_of(numerics) == std::wstring::npos);
if(Key == L'.' && pointErrorUsing)
{
Key = 0;
return;
}
// avoid ex: "-2-3" and "2-34"
bool minusErrorUsing = (editString.find_first_of(L'-') != std::wstring::npos)
|| !editString.empty();
if(Key == L'-' && minusErrorUsing)
{
Key = 0;
return;
}
if(EditExit->Text.Length() > 5 && Key != L'\b')
{
Key = 0;
return;
}
DoChange(Sender);
}
當使用者每件入一個按鍵,就呼叫此function:
void __fastcall OnEditPress(TObject *Sender, wchar_t &Key)
{
std::wstring numerics(L"0123456789");
TEdit *EditExit = (TEdit*)Sender;
std::wstring editString = EditExit->Text.c_str();
if((Key < L'0' || Key > L'9') && Key != L'\b' && Key != L'.' && Key != L'-')
{
Key = 0;
return;
}
// avoid ".3"
bool pointErrorUsing = (editString.find_first_of(L'.') != std::wstring::npos)
|| (editString.find_first_of(numerics) == std::wstring::npos);
if(Key == L'.' && pointErrorUsing)
{
Key = 0;
return;
}
// avoid ex: "-2-3" and "2-34"
bool minusErrorUsing = (editString.find_first_of(L'-') != std::wstring::npos)
|| !editString.empty();
if(Key == L'-' && minusErrorUsing)
{
Key = 0;
return;
}
if(EditExit->Text.Length() > 5 && Key != L'\b')
{
Key = 0;
return;
}
DoChange(Sender);
}
(C++) STL之 string 介紹
既然使用C++,筆者建議非必要不要使用字元陣列來進行字串操作,因為字元陣列的長度一個問題!不像C++標準函式庫所提供的string類別,提供判斷自己是否為空字串,且不用擔心預設長度問題,在字串合併等操作也都非常容易實現,而陣列也不能直接指定給另一個陣列,所以您無法直接將字串指定給另一個字串,您也無法對兩個字串直接進行串連的動作,例如:
#include < iostream >
#include < string >
int main()
{
std::string str1;
std::string str2("Hello");
std::string str3(str2);
// 判斷是否為空字串
if(str1.empty())
{
std::cout << "str1 為空字串" << std::endl;
}
// 字串合併
str1 = str2 + str3;
std::cout << str1 << std::endl;
return 0;
}
#include < iostream >
#include < string >
int main()
{
std::string str1;
std::string str2("Hello");
std::string str3(str2);
// 判斷是否為空字串
if(str1.empty())
{
std::cout << "str1 為空字串" << std::endl;
}
// 字串合併
str1 = str2 + str3;
std::cout << str1 << std::endl;
return 0;
}
(C++) C-style 字串
C語言中字串是由字元所組成的陣列,字串的名子本身是一個pointer,字串以'\0'字元結尾,有兩種可行的宣告方式:
方式一:
char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};
方式二:
char str[] = "Hello"; (程式會自動加上空字元 '\0')
範例:
#include < iostream >
int main( )
{
char str[] = "Hello";
for(int i = 0; i < (sizeof(str)/sizeof(str[0])); ++i)
{
if(str[i] == '\0')
cout << " null";
else
cout << " " << str[i];
}
return 0;
}
方式一:
char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};
方式二:
char str[] = "Hello"; (程式會自動加上空字元 '\0')
範例:
#include < iostream >
int main( )
{
char str[] = "Hello";
for(int i = 0; i < (sizeof(str)/sizeof(str[0])); ++i)
{
if(str[i] == '\0')
cout << " null";
else
cout << " " << str[i];
}
return 0;
}
判斷string是否為number
bool IsNumber(const std::wstring& str)
{
if ( str.empty() )
return false;
int pos = 0;
if ( str[0] == _T('-') && str.length() >= 2)
pos = 1;
return (str[pos] >= _T('0') && str[pos] <= _T('9'));
}
{
if ( str.empty() )
return false;
int pos = 0;
if ( str[0] == _T('-') && str.length() >= 2)
pos = 1;
return (str[pos] >= _T('0') && str[pos] <= _T('9'));
}
2013年5月6日 星期一
(C++) stringstream介紹
如果想將 int 轉成 string,
傳統C的作法如下:
int a = 10;
wchat_t wstr = [1024];
wsprintf(wstr, L"%d", a);
以上做法有兩點需要注意,
1. 格式 類型(%d)
2. Buffer大小
格式類型給錯,
會造成不可預期的錯誤,
Buffer大小,
太大 不經濟,
太小 那就糟了。
可以用stringstream來解決,
有istringstream、ostringstream及stringsteam,
分別對應輸入、輸出及輸出+輸入,
用例子說明最快:
#include
#include
#include
int main( )
{
int a = 10;
std::wstring wstr;
std::wstringstream wstream;
wstream << a;
wstream >> wstr;
}
傳統C的作法如下:
int a = 10;
wchat_t wstr = [1024];
wsprintf(wstr, L"%d", a);
以上做法有兩點需要注意,
1. 格式 類型(%d)
2. Buffer大小
格式類型給錯,
會造成不可預期的錯誤,
Buffer大小,
太大 不經濟,
太小 那就糟了。
可以用stringstream來解決,
有istringstream、ostringstream及stringsteam,
分別對應輸入、輸出及輸出+輸入,
用例子說明最快:
#include
#include
#include
int main( )
{
int a = 10;
std::wstring wstr;
std::wstringstream wstream;
wstream << a;
wstream >> wstr;
}
(C++) 將Debug資訊印出來 - 數字篇
#include
int main( )
{
int a = 10;
wchar_t str[50];
wsprintf(str, L"%d", a);
OutputDebugString(str);
}
int main( )
{
int a = 10;
wchar_t str[50];
wsprintf(str, L"%d", a);
OutputDebugString(str);
}
2013年5月2日 星期四
重構 BMI program (Android)
package com.example.test;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
public class MainActivity extends Activity {
private static String TAG = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
findViews();
setListener();
}
private Button button_calculate;
private EditText field_height;
private EditText field_weight;
private TextView view_result;
private TextView view_advice;
private void findViews()
{
button_calculate = (Button)findViewById(R.id.submit);
field_height = (EditText)findViewById(R.id.Height);
field_weight = (EditText)findViewById(R.id.Weight);
view_result = (TextView)findViewById(R.id.result);
view_advice = (TextView)findViewById(R.id.advice);
}
private void setListener()
{
button_calculate.setOnClickListener(calculateBMI);
}
private Button.OnClickListener calculateBMI = new Button.OnClickListener()
{
public void onClick(View arg0) {
double height = Double.parseDouble(field_height.getText().toString()) / 100;
double weight = Double.parseDouble(field_weight.getText().toString());
double result = weight / (height * height);
DecimalFormat df = new DecimalFormat("0.00");
view_result.setText(getText(R.string.bmi_result) + df.format(result));
if(result > 25)
{
view_advice.setText(R.string.advice_heavy);
}
else if(result < 20)
{
view_advice.setText(R.string.advice_light);
}
else
{
view_advice.setText(R.string.advice_well);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
public class MainActivity extends Activity {
private static String TAG = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
findViews();
setListener();
}
private Button button_calculate;
private EditText field_height;
private EditText field_weight;
private TextView view_result;
private TextView view_advice;
private void findViews()
{
button_calculate = (Button)findViewById(R.id.submit);
field_height = (EditText)findViewById(R.id.Height);
field_weight = (EditText)findViewById(R.id.Weight);
view_result = (TextView)findViewById(R.id.result);
view_advice = (TextView)findViewById(R.id.advice);
}
private void setListener()
{
button_calculate.setOnClickListener(calculateBMI);
}
private Button.OnClickListener calculateBMI = new Button.OnClickListener()
{
public void onClick(View arg0) {
double height = Double.parseDouble(field_height.getText().toString()) / 100;
double weight = Double.parseDouble(field_weight.getText().toString());
double result = weight / (height * height);
DecimalFormat df = new DecimalFormat("0.00");
view_result.setText(getText(R.string.bmi_result) + df.format(result));
if(result > 25)
{
view_advice.setText(R.string.advice_heavy);
}
else if(result < 20)
{
view_advice.setText(R.string.advice_light);
}
else
{
view_advice.setText(R.string.advice_well);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
計算BMI (Android)
package com.example.test;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
public class MainActivity extends Activity {
private static String TAG = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
Button submitButton = (Button)findViewById(R.id.submit);
submitButton.setOnClickListener(calculateBMI);
}
private OnClickListener calculateBMI = new OnClickListener()
{
public void onClick(View v)
{
EditText height = (EditText)findViewById(R.id.Height);
EditText weight = (EditText)findViewById(R.id.Weight);
double heightValue = Double.parseDouble(height.getText().toString()) / 100;
double weightValue = Double.parseDouble(weight.getText().toString());
double bmi = weightValue / (heightValue * heightValue);
DecimalFormat df = new DecimalFormat("0.00");
TextView result = (TextView)findViewById(R.id.result);
result.setText("Your BMI is " + df.format(bmi));
TextView advice = (TextView)findViewById(R.id.advice);
if(bmi > 25)
{
advice.setText(R.string.advice_heavy);
}
else if(bmi < 20)
{
advice.setText(R.string.advice_light);
}
else
{
advice.setText(R.string.advice_well);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
public class MainActivity extends Activity {
private static String TAG = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
Button submitButton = (Button)findViewById(R.id.submit);
submitButton.setOnClickListener(calculateBMI);
}
private OnClickListener calculateBMI = new OnClickListener()
{
public void onClick(View v)
{
EditText height = (EditText)findViewById(R.id.Height);
EditText weight = (EditText)findViewById(R.id.Weight);
double heightValue = Double.parseDouble(height.getText().toString()) / 100;
double weightValue = Double.parseDouble(weight.getText().toString());
double bmi = weightValue / (heightValue * heightValue);
DecimalFormat df = new DecimalFormat("0.00");
TextView result = (TextView)findViewById(R.id.result);
result.setText("Your BMI is " + df.format(bmi));
TextView advice = (TextView)findViewById(R.id.advice);
if(bmi > 25)
{
advice.setText(R.string.advice_heavy);
}
else if(bmi < 20)
{
advice.setText(R.string.advice_light);
}
else
{
advice.setText(R.string.advice_well);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Android 生命週期
package com.example.test;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.util.Log;
public class MainActivity extends Activity {
private static String TAG = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
public void onStop()
{
super.onStop();
Log.d(TAG, "onStop");
}
public void onResume()
{
super.onResume();
Log.d(TAG, "onResume");
}
public void onPause()
{
super.onPause();
Log.d(TAG, "onPause");
}
public void onStart()
{
super.onStart();
Log.d(TAG, "onStart");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.util.Log;
public class MainActivity extends Activity {
private static String TAG = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
public void onStop()
{
super.onStop();
Log.d(TAG, "onStop");
}
public void onResume()
{
super.onResume();
Log.d(TAG, "onResume");
}
public void onPause()
{
super.onPause();
Log.d(TAG, "onPause");
}
public void onStart()
{
super.onStart();
Log.d(TAG, "onStart");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
2013年5月1日 星期三
string 和 wstring 互相轉換,適用於ASCII編碼
#include < iostream >
#include < string >
using namespace std;
int main(void)
{
// -----------------------------------------------------------------
// 1. string to wstring
// -----------------------------------------------------------------
// 不適用其他非ASCII編碼(1 byte)的字元,如Unicode編碼(2 bytes)之中文
string str1 = "abc";
wstring wstr1;
wstr1.assign(str1.begin(), str1.end());
// or
// wstring wstr1(str1.begin(), str1.end());
wcout << wstr1 << endl;
// -----------------------------------------------------------------
// 2. wstring to string
// -----------------------------------------------------------------
wstring wstr2 = L"abc";
string str2(wstr2.begin(), wstr2.end());
// or
//str2.assign(wstr2.begin(), wstr2.end());
cout << str2 << endl;
}
#include < string >
using namespace std;
int main(void)
{
// -----------------------------------------------------------------
// 1. string to wstring
// -----------------------------------------------------------------
// 不適用其他非ASCII編碼(1 byte)的字元,如Unicode編碼(2 bytes)之中文
string str1 = "abc";
wstring wstr1;
wstr1.assign(str1.begin(), str1.end());
// or
// wstring wstr1(str1.begin(), str1.end());
wcout << wstr1 << endl;
// -----------------------------------------------------------------
// 2. wstring to string
// -----------------------------------------------------------------
wstring wstr2 = L"abc";
string str2(wstr2.begin(), wstr2.end());
// or
//str2.assign(wstr2.begin(), wstr2.end());
cout << str2 << endl;
}
如何替換字串中的字元(C++)
#include < string >
int main(void)
{
std::wstring name = L"abc-def\\xyz";
int position = name.find(L"\\");
while(position != name.npos)
{
name.replace(position, 1, L"-");
position = name.find(L"\\", position + 1);
}
}
int main(void)
{
std::wstring name = L"abc-def\\xyz";
int position = name.find(L"\\");
while(position != name.npos)
{
name.replace(position, 1, L"-");
position = name.find(L"\\", position + 1);
}
}
訂閱:
文章 (Atom)