13 c++ 字串

26
13 C++ 13 C++ 字字 字字 字字字字字字字字字 字字字字字字字字字 13.1 13.1 C++ C++ 字字字字 字字字字 13-2 13-2 13.1.1 13.1.1 字字 字字 C++ C++ 字字 字字 13-2 13-2 13.1.2 13.1.2 字字 字字 C++ C++ 字字 字字 13-4 13-4 13.1.3 13.1.3 C++ C++ 字字字字字字 字字字字字字 13-5 13-5 13.1.4 13.1.4 C++ C++ 字字字字 字字字字 13-8 13-8 13.1.5 13.1.5 C++ C++ 字字字字字字 字字字字字字 13-9 13-9

Upload: ivory

Post on 08-Jan-2016

87 views

Category:

Documents


4 download

DESCRIPTION

字串與數值轉換函數 13.1 C++ 字串類別 13-2 13.1.1 建立 C++ 字串 13-2 13.1.2 輸入 C++ 字串 13-4 13.1.3C++ 字串運算符號 13-5 13.1.4C++ 字串陣列 13-8 13.1.5C++ 字串類別成員 13-9. 13 C++ 字串. 字串與數值轉換函數. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 13  C++ 字串

13 C++13 C++ 字串字串 字串與數值轉換函數字串與數值轉換函數 13.113.1 C++C++ 字串類別字串類別 13-213-2 13.1.113.1.1 建立建立 C++C++ 字串字串 13-213-2 13.1.213.1.2 輸入輸入 C++C++ 字串字串 13-413-4 13.1.313.1.3 C++C++ 字串運算符號 字串運算符號 13-513-5 13.1.413.1.4 C++ C++ 字串陣列字串陣列 13-813-8 13.1.513.1.5 C++C++ 字串類別成員 字串類別成員 13-913-9

Page 2: 13  C++ 字串

字串與數值轉換函數字串與數值轉換函數 字串形式的數值(“字串形式的數值(“ 3.141513”3.141513” )是不能)是不能

當做算數運算的資料,所以當做算數運算的資料,所以 C++ C++ 提供字串提供字串與數值間的轉換函數,例如字串轉成浮點與數值間的轉換函數,例如字串轉成浮點數(數( atofatof )、字串轉成整數()、字串轉成整數( atoiatoi )、字)、字串轉成長整數(串轉成長整數( atolatol )等函數,以及整數)等函數,以及整數轉成字串(轉成字串( itoaitoa )的函數。 )的函數。

Page 3: 13  C++ 字串

轉成浮點數值轉成浮點數值 atofatof #include <cstdlib>#include <cstdlib> atof (atof ( 字串字串 ))

範例範例s = "-113138.12E-25 ";s = "-113138.12E-25 "; //// 定義字串定義字串x = atof( s );x = atof( s ); //// 轉浮點數轉浮點數 x=-1.1313812x=-1.1313812e-22e-22

Page 4: 13  C++ 字串

轉成整數值轉成整數值 atoiatoi #include <cstdlib>#include <cstdlib> atoi (atoi ( 字串字串 ))

範例範例s = " 686 pigs ";s = " 686 pigs "; //// 定義字串定義字串i = atoi( s );i = atoi( s ); //// 轉換成短整數轉換成短整數 ,i=68,i=6866

Page 5: 13  C++ 字串

轉成長整數值轉成長整數值 atolatol #include <cstdlib>#include <cstdlib> atol (atol ( 字串字串 ))

範例範例s = " 138686 dollars";s = " 138686 dollars"; //// 定義字串定義字串l = atol( s );l = atol( s ); //// 轉換成長整數轉換成長整數 ,l=13,l=1386868686

Page 6: 13  C++ 字串

整數轉成字串整數轉成字串 itoaitoa #include <cstdlib>#include <cstdlib> itoa (itoa ( 數值數值 , , 字串字串 , , 基底基底 ))

範例範例char intArray[10];char intArray[10];itoa(1234, intArray, 8);itoa(1234, intArray, 8); //1234//1234 轉成字串轉成字串 "2322""2322"itoa(1234, intArray, 10);itoa(1234, intArray, 10); //1234//1234 轉成字串轉成字串 "1234""1234"itoa(1234, intArray, 16);itoa(1234, intArray, 16); //1234//1234 轉成字串轉成字串 "4d2""4d2"

Page 7: 13  C++ 字串

13.413.4 C++C++ 字串類別字串類別 C++ C++ 字串類別是一個抽象的資料型態,它不是字串類別是一個抽象的資料型態,它不是 CC

++ ++ 原本內建的資料型態,如原本內建的資料型態,如 intint 或或 charchar 。。 C++ C++ 字串類別與字串類別函數是定義於字串類別與字串類別函數是定義於 C++ C++ 的新型標的新型標題檔(不含 題檔(不含 .h.h 的標題檔)中,而的標題檔)中,而 CC 型態的字串型態的字串標題檔(標題檔( string.hstring.h )並沒有定義這些函數。所以)並沒有定義這些函數。所以使用這些函數以前,必須插入使用這些函數以前,必須插入 C++ C++ 新型的標題檔新型的標題檔(( stringstring )。)。

在插入在插入 C++ C++ 新型標題檔後(例如:新型標題檔後(例如: #include <i#include <iostream>ostream> ),必須加入(),必須加入( using namespace stusing namespace std;d; )敘述,來宣告程式中的函數是使用新型的)敘述,來宣告程式中的函數是使用新型的 C+C++ + 型態標題檔,而不是使用舊型的型態標題檔,而不是使用舊型的 CC 型態標題檔。型態標題檔。

Page 8: 13  C++ 字串

13.4.1 13.4.1 建立建立 C++C++ 字串字串 #include <string>#include <string>

using namespace std;using namespace std; string string 物件名稱物件名稱 ;; //// 第一式第一式 string string 物件名稱物件名稱 (“(“ 字串”字串” );); //// 第二式第二式 string string 物件名稱 物件名稱 = “= “ 字串”字串” ;; //// 第三式第三式 string string 物件名稱物件名稱 (“(“ 字元”字元” , , 長度長度 );); //// 第四式第四式 string string 物件名稱物件名稱 (( 字串物件字串物件 );); //// 第五式第五式 string string 物件名稱物件名稱 (( 字串物件字串物件 , , 起始起始 , , 長度長度 );); //// 第六式第六式

Page 9: 13  C++ 字串

13.4.1 13.4.1 建立建立 C++C++ 字串 字串 (( 續續 )) 範例:範例: C C 型態字串型態字串

char *name = "JOHN";char *name = "JOHN";char name[20] = "JOHN";char name[20] = "JOHN";

範例:範例: C++ C++ 型態字串型態字串string s1;string s1; //// 宣告宣告 s1s1string s2("JOHN ARCHER");string s2("JOHN ARCHER"); //s2 = "JOHN ARCHER"//s2 = "JOHN ARCHER"string s3 = "MARY ARCHER";string s3 = "MARY ARCHER"; //s3 = "MARY ARCHE//s3 = "MARY ARCHER"R"string s4("A", 4);string s4("A", 4); //// 宣告宣告 s4 = "AAAA"s4 = "AAAA"string s5(s2);string s5(s2); //// 宣告宣告 s5 = "JOHN ARCHER"s5 = "JOHN ARCHER"string s6(s2, 0, 4);string s6(s2, 0, 4); //// 宣告宣告 s6 = "JOHN"s6 = "JOHN"

Page 10: 13  C++ 字串

13.4.2 13.4.2 輸入輸入 C++C++ 字串字串 #include <iostream>#include <iostream> using namespace std;using namespace std; getline (cin, getline (cin, 字串物件字串物件 ))

範例範例string s;string s;getline(cin, s);getline(cin, s); //// 假設輸入假設輸入 "Hello "Hello world!"world!"cout << s;cout << s; //// 輸出輸出 Hello world!Hello world!

Page 11: 13  C++ 字串

13.4.3 C++13.4.3 C++ 字串運算符號字串運算符號運算符號運算符號 功能說明功能說明

== 指定資料指定資料++ 串接字串串接字串+=+= 連接並指定字串連接並指定字串==== 相等相等!=!= 不等不等<< 小於小於<=<= 小於等於小於等於>> 大於大於>=>= 大於等於大於等於[][] 註標註標<<<< 輸出輸出>>>> 輸入輸入

Page 12: 13  C++ 字串

13.4.3 C++13.4.3 C++ 字串運算符號 字串運算符號 (( 續續 )) 指定資料指定資料

範例範例string s1, s2("Hello");string s1, s2("Hello");s1 = s2;s1 = s2; //s1="Hello"//s1="Hello"s1 = "Hello world!";s1 = "Hello world!"; //s1="Hello //s1="Hello world!"world!"

Page 13: 13  C++ 字串

13.4.3 C++13.4.3 C++ 字串運算符號 字串運算符號 (( 續續 )) 串接字串串接字串

範例範例string s1("Hello"), s2(" world"), s3;string s1("Hello"), s2(" world"), s3;s3 = s1 + s2;s3 = s1 + s2; //s3="Hello world"//s3="Hello world"string s4(s3 + "!");string s4(s3 + "!"); //s4="Hello worl//s4="Hello world!"d!"s1 += "!";s1 += "!"; //s1="Hello!"//s1="Hello!"

Page 14: 13  C++ 字串

13.4.3 C++13.4.3 C++ 字串運算符號 字串運算符號 (( 續續 )) 比較字串比較字串

範例範例string s1("ANSI/ISO C++"), s2("Visual C+string s1("ANSI/ISO C++"), s2("Visual C++");+");if(s1 == s2)if(s1 == s2)

cout << "s1 == s2";cout << "s1 == s2";elseelse

cout << "s1 != s2";cout << "s1 != s2";

Page 15: 13  C++ 字串

13.4.4 C++ 13.4.4 C++ 字串陣列字串陣列 #include <string>#include <string> using namespace std;using namespace std; string string 字串物件字串物件 [[ 長度長度 ];];

範例範例string s1[] = {"Java", "Assembly", "Delphstring s1[] = {"Java", "Assembly", "Delpha", a", "Basic", "Fortran", "C"Basic", "Fortran", "Cobol"};obol"};

Page 16: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員字串類別成員成員函數成員函數 功能功能s1.append(s2)s1.append(s2) 連接字串連接字串s1.append(s2, s1.append(s2, 起始位置起始位置 , , 字串長度字串長度 )) 連接字串連接字串s1.assign(s2)s1.assign(s2) 指定字串指定字串s1.assign(s2, s1.assign(s2, 起始位置起始位置 , , 字串長度字串長度 )) 指定字串指定字串s1.at(s1.at( 位置位置 )) 存取指定位置存取指定位置s1.capacity()s1.capacity() 取得字串容量取得字串容量s1.clear()s1.clear() 清除字串全部內容清除字串全部內容s1.compare(s2)s1.compare(s2) 比較字串比較字串s1.compare(s1s1.compare(s1 起點起點 , s1, s1 長度長度 , s2, s2, s2, s2 起點起點 , s, s22 長度長度 ))

比較字串比較字串

s1.copy(s2, s1.copy(s2, 起始位置起始位置 , , 字串長度字串長度 )) 複製字串複製字串

Page 17: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 ))成員函數成員函數 功能功能s1.erase(s1.erase( 起始位置起始位置 , , 清除長度清除長度 )) 清除字串部分內容清除字串部分內容s1.find(s2)s1.find(s2) 找尋字串找尋字串s1.find(s2, s1.find(s2, 起始位置起始位置 )) 找尋字串找尋字串s1.insert(s1.insert( 起始位置起始位置 , s2), s2) 插入字串插入字串s1.length()s1.length() 取得字串長度取得字串長度s1.max_size()s1.max_size() 取得字串最大長度取得字串最大長度s1.replace(s1.replace( 起始位置起始位置 , , 字串長度字串長度 , s2), s2) 取代部分字串取代部分字串s1.size()s1.size() 取得字串大小取得字串大小

s1.substr(s1.substr( 起始位置起始位置 , , 字串長度字串長度 )) 找尋部分字串找尋部分字串

s1.swap(s2)s1.swap(s2) 對調字串對調字串

Page 18: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 指定資料指定資料 範例一範例一

string s1, s2("Hello world!");string s1, s2("Hello world!");s1.assign(s2);s1.assign(s2); //s1="Hello worl//s1="Hello world!“d!“

範例二範例二string s1("Hello world!"), s2;string s1("Hello world!"), s2;s2.assign(s1, 6, 5);s2.assign(s1, 6, 5); //s2 = "world"//s2 = "world"s2[2] = 'u';s2[2] = 'u'; //s2 = "wo//s2 = "wouuld"ld"

Page 19: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 串接字串串接字串

範例範例string s1("Hello"), s2("wi"), s3(" world!");string s1("Hello"), s2("wi"), s3(" world!");s1.append(s3);s1.append(s3); //s1 = "Hello wo//s1 = "Hello world!"rld!"s2.append(s3, 4, 2);s2.append(s3, 4, 2); //s2 = "wild"//s2 = "wild"

Page 20: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 比較字串比較字串

範例範例string s1("ANSI/ISO C++"), s2("Visual C++");string s1("ANSI/ISO C++"), s2("Visual C++");cout << s1.compare(13, 3, s2, 7, 3) << endl;cout << s1.compare(13, 3, s2, 7, 3) << endl;

//// 等於等於 00 表示相等表示相等cout << s1.compare(0, 8, s2, 0, 8) << endl;cout << s1.compare(0, 8, s2, 0, 8) << endl;

//// 不等於不等於 00 表示不相等表示不相等

Page 21: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 取得子字串取得子字串

範例範例string s1("Hello world!"), s2;string s1("Hello world!"), s2;s2 = s1.substr(6, 5);s2 = s1.substr(6, 5); //s2 = //s2 = worldworld

Page 22: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 對調字串對調字串

範例範例string s1("Visual C++"), s2("ANSI/ISO Cstring s1("Visual C++"), s2("ANSI/ISO C++");++");s1.swap(s2);s1.swap(s2); //s1//s1 與與 s2s2 對調對調cout << s1 << endl;cout << s1 << endl; //// 顯示顯示 ANSI/ISO C++ANSI/ISO C++cout << s2 << endl;cout << s2 << endl; //// 顯示顯示 Visual C++Visual C++

Page 23: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 找尋字串找尋字串

範例範例string s1("ANSI/ISO C++"), s2("C++");string s1("ANSI/ISO C++"), s2("C++");int p;int p;p = s1.find(s2);p = s1.find(s2); // p = 7 (// p = 7 ( 找到再位置找到再位置 7)7)p = s1.find("Visual");p = s1.find("Visual"); // p = -1 (// p = -1 ( 找不到找不到 ))

Page 24: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 取代字串取代字串

範例範例string s("call by reference");string s("call by reference");int p = s.find(" ");int p = s.find(" ");while(p < string::npos)while(p < string::npos) // // 若不等於字串結尾若不等於字串結尾則繼續則繼續{{

s.replace(p, 1, "-");s.replace(p, 1, "-"); // // 找到後找到後以以 "–""–" 取代取代 " "" "

p = s.find(" ", p++);p = s.find(" ", p++); // // 找尋下一個空白找尋下一個空白}}

Page 25: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 插入字串插入字串

範例範例string s1("ANSI C++"), s2("ISO");string s1("ANSI C++"), s2("ISO");s1.insert(4, s2);s1.insert(4, s2); //s1=ANSIISO C//s1=ANSIISO C++++s1.insert(4, "/");s1.insert(4, "/"); //s1=ANSI/ISO C++//s1=ANSI/ISO C++

Page 26: 13  C++ 字串

13.4.5 C++13.4.5 C++ 字串類別成員 字串類別成員 (( 續續 )) 其他其他

範例範例string s1("ANSI/ISO C++");string s1("ANSI/ISO C++");cout << s1.length() << endl;cout << s1.length() << endl; //12//12cout << s1.size() << endl;cout << s1.size() << endl; //12//12cout << s1.capacity() << endl;cout << s1.capacity() << endl; //12//12cout << s1.max_size() << endl;cout << s1.max_size() << endl; //4213413672//42134136728181cout << s1.at(10) << endl;cout << s1.at(10) << endl; //'C'//'C'