全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2713
推到 Plurk!
推到 Facebook!

關於c++裡string的用法

尚未結案
Fanta
一般會員


發表:8
回覆:7
積分:3
註冊:2005-05-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-03 00:15:37 IP:140.118.xxx.xxx 未訂閱
例如以下程式,簡單的將string b 帶入 string c
#include
void main()
{
        
        char b[]="12345",c[10];
        
        for(int x=0;b[x]!='\0';x  )
                c[x]=b[x];
        cout<    印出的結果是 12345後面亂碼,我想是因為string c有10格吧    但是以以下方法寫出卻不會
 #include
void main()
{
        
        char b[]="12345",c[10];
        
        for(int x=0;(c[x]=b[x])!='\0';x  )
                ;
        cout<
為什麼這樣寫就指印出12345而沒亂碼,string c一樣是10,結果卻不同。 不好意思,還有個問題,array能轉變成string嗎?我直接用個等式相等,我太天真了,請問有方法嗎? 以上兩個問題,需要你的幫忙,感謝!
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-03 00:59:15 IP:203.204.xxx.xxx 未訂閱
1. for(int x=0;b[x]!='\0';x ) 因為不等於'\0'就會直接停止回圈,所以c陣列沒有填到'\0'結尾字元因此會印出亂碼. for(int x=0;(c[x]=b[x])!='\0';x ) 先將b[x]填到c[x]後再判斷是否為'\0',因此c陣列會被填入'\0'結尾字元,所以正常. c 沒有string這個物件,如果你用C Builder才有,如果你要用類似等於過去,可以使用相關函數,如strcpy.
Fanta
一般會員


發表:8
回覆:7
積分:3
註冊:2005-05-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-03 01:12:06 IP:140.118.xxx.xxx 未訂閱
感謝supman 第一個問題我了解了,我粗心沒有注意到。 但是第二個問題還是有點不了解,array應該是存入一串數值,string應該是存入一串文字,據我了解是這樣,但是string沒有在C ???,那跟C builder又有何不同,也許會覺得這問題有點笨,不過我初學C 我也不太了解,麻煩說明一下,感謝 int(data type) a[n];//這是我所知的array char a[n];//這是我所知的string 不知道我這觀念有錯誤嗎?有的話麻煩指正我吧,感激不盡 發表人 - Fanta 於 2005/06/03 01:16:09
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-03 01:25:38 IP:203.204.xxx.xxx 未訂閱
string沒有在C ???,那跟C builder又有何不同,也許會覺得這問題有點笨,不過我初學C 我也不太了解,麻煩說明一下,感謝 有何不同@@,這我不太會回答,用了就知道= =" int(data type) a[n];//這是我所知的array char a[n];//這是我所知的string 以上都是Array,所謂的String就是由一串Char所組成的. Array是陣列,不一定是數值,或字元,或任何一種Type.
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-03 09:46:18 IP:220.139.xxx.xxx 未訂閱
C 有定義 string 型別, 有討論到STL的相關書籍都會提到 BCB 獨有的型別是 AnsiString, 就個人的使用感覺來說, 使用上比 string 方便 然而他不是標準(也就是其他編譯器不一定支援), 也和STL不相容
yhchu
一般會員


發表:2
回覆:70
積分:24
註冊:2004-01-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-03 15:37:11 IP:220.130.xxx.xxx 未訂閱
char [] 就是元素型態為 char 的陣列。就是因為 C 裡面沒有字串型別,所以用字元陣列充當字串。但是陣列的大小是固定的,所以用一個空字元 '\0' 代表字串的結束。 C STL 裡有提供 string 型態,AnsiString 則是 BCB 裡模擬 Delphi String 型別的字串型態,每一種型態的用法都不一樣。
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-03 19:24:59 IP:211.22.xxx.xxx 未訂閱
引言: int(data type) a[n];//這是我所知的array char a[n];//這是我所知的string 不知道我這觀念有錯誤嗎?有的話麻煩指正我吧,感激不盡
小弟插個花! <>> <>>既然瞭解上面的觀念,這個就應該是字元陣列(字串),而不是<>>! > -----------------------------------------------
Fanta
一般會員


發表:8
回覆:7
積分:3
註冊:2005-05-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-03 21:08:27 IP:140.118.xxx.xxx 未訂閱
感謝各位解答 照這樣說,我所認為的string,實際上是char形態的array型成的,來儲存字元,而不是真正的string,不知道是不是這個意思呢?
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-03 21:39:21 IP:211.22.xxx.xxx 未訂閱
引言: 照這樣說,我所認為的string,實際上是char形態的array型成的,來儲存字元,而不是真正的string,不知道是不是這個意思呢?
yes! you got it. ----------------------------------------------- Creation is the fundation of promotion.
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-03 21:58:16 IP:203.204.xxx.xxx 未訂閱
您好: 在C Builder中您可以做實驗 AnsiString S="12345" AnsiString S1="abc" 上面就是一各字串類別,那怎麼取出其中某各元素? S.c_str()[1],就會取得了"2"這各元素,所以也可以把他想像成一個陣列,但除此之外他還提供了許多的Method,如S.ToInt()以及operator,如兩各AnsiString可以相加成一個字串,S S1等於"12345abc".
Fanta
一般會員


發表:8
回覆:7
積分:3
註冊:2005-05-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-03 22:07:27 IP:140.118.xxx.xxx 未訂閱
感謝各位解答: 我好像又了解一件事了,c bulider就是所謂的BCB嗎? 我好像又問個笨問題,因為我沒學過BCB,所以不清楚。 還有我一個問題還未解決,要將array的data type由int 轉成char, 因為我想用個rand產生一組數字,然後在變成文字來比較,因為文字無法用rand隨機產生,所以現在就面臨這麼問題,據我所知,這兩種data type是無法互換的,還是有其他類似的方法,希望能幫我解答,感謝。 發表人 - Fanta 於 2005/06/03 22:17:18
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-03 22:37:34 IP:203.204.xxx.xxx 未訂閱
您好: 數字轉文字的範例
#include 
#include     int main(void)
{
   int number = 12345;
   char string[25];       itoa(number, string, 10);
   printf("integer = %d string = %s\n", number, string);
   return 0;
}
我覺得您可能需要去買一些來k會比較好,討論板上比較難給您完整的觀念. 另外,善用站內搜尋也可以學到很多東西. 發表人 - supman 於 2005/06/03 22:46:05
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-04 03:50:50 IP:211.22.xxx.xxx 未訂閱
引言: 還有我一個問題還未解決,要將array的data type由int 轉成char, 因為我想用個rand產生一組數字,然後在變成文字來比較,因為文字無法用rand隨機產生,所以現在就面臨這麼問題,據我所知,這兩種data type是無法互換的,還是有其他類似的方法,希望能幫我解答,感謝。 發表人 - Fanta 於 2005/06/03 22:17:18
Fanta兄,C++最大的優點,但也可能是缺點,就是他很自由,自由到有些型別,他都能夠由其COMPILER幫PROGRAMMER主動轉換!不像DELPHI的OBJECT PASCAL那麼嚴謹,但相對的也帶來副作用。看以下例子:
int number;
char a;
 a = 'c';
 number = a; //number得到a的ASCII值,有些COMPILER會發出警告
 number = 500;
 a = number; //,有些COMPILER會發出警告,但現在就a本身型態的範圍,已經發生溢位的情形,所以值是錯誤的!
當然在做指定時,也可以做MASK強制轉型,但PROGRAMMER一定要知道這時他自己在做什麼! 寫這個小例子只是告訴你所說的觀念並不正確,想要確切瞭解 > -----------------------------------------------
Fanta
一般會員


發表:8
回覆:7
積分:3
註冊:2005-05-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-04 09:37:33 IP:140.118.xxx.xxx 未訂閱
感謝Stallion的指導 supman 的解答    關於
itoa(number, string, 10);
裡面的10所代表的意義是什麼呢? 是表示10進位嗎? 還有在設置string大小的時候,例如現在5個數,是要設成string[6],包含'\0'嗎? 發表人 - Fanta 於 2005/06/04 09:41:44
Fanta
一般會員


發表:8
回覆:7
積分:3
註冊:2005-05-14

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-06-04 09:58:10 IP:140.118.xxx.xxx 未訂閱
我剛剛試過好像是這麼一回事,10代表進位。 真不好意思,我還有個英文的小問題,itoa是個縮寫,我想問他原本的英文單字是什麼,這樣比較好記感謝
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-06-04 12:21:30 IP:203.204.xxx.xxx 未訂閱
您好: itoa(number, string, 10); 裡面的10所代表的意義是什麼呢? 是表示10進位嗎? 是的. 還有在設置string大小的時候,例如現在5個數,是要設成string[6],包含'\0'嗎? 不是. 5個數,Str[5],您是填在Str[0],Str[1],Str[2],Str[3],Str[4],Str[5]. Str[5]填入'\0'
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-06-04 17:46:40 IP:211.22.xxx.xxx 未訂閱
引言: 我剛剛試過好像是這麼一回事,10代表進位。 真不好意思,我還有個英文的小問題,itoa是個縮寫,我想問他原本的英文單字是什麼,這樣比較好記感謝 < face="Verdana, Arial, Helvetica"> itoa means integer to ascii. atoi means ascii to integer. -----------------------------------------------
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-06-04 19:33:16 IP:61.140.xxx.xxx 未訂閱
我認為 itoa 是 "Integer To Alphanumeric" 的縮寫,如果要解釋成 "Integer To ASCII" 的話,那也得寫成 "Integer To ASCII Character" 才對,否則 12 這個數字轉出來的應該是 0x31, 0x32 這樣的編碼數字,而不是 "12" 這樣的字串了,因為 ASCII 的 C 指的是 Code (編碼) 不是 Character (字元)。 發表人 - RedSnow 於 2005/06/04 19:35:21
系統時間:2024-11-23 13:06:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!