2011-06-13 74 views
2

假設我有一段字符串「abcd」我想要一個函數從「abcd」得到char'a',另一個函數從「abcd」得到「bcd」。C++如何提取字符串的第一個和其餘部分?

+1

你說的是std :: string,還是隻是一般意義上的「字符串」? – Tim 2011-06-13 22:07:47

+1

@Tim在C++中,std :: string是「一般意義上的」。 – 2011-06-13 23:00:50

+0

@尼爾 - 那麼 - 那些知道C++肯定 - 但如果一個人不得不問這個問題,我不會假設太多... – Tim 2011-06-14 01:04:51

回答

7

假設你正在使用std::string,你想:

str[0] // for the first char 
str.substr(1) // for the rest of string 

如果您使用標準的C char*字符串,你想:

str[0] // for the first char 

((char*)str+1) // or 
&str[1]  // for the rest of string 

當使用前一種方法,確保您'正在捕獲out_of_range異常,或者在調用之前檢查字符串長度。

1

編輯:我知道我以前給過一個C++。NET示例。

你在找什麼是substr方法。如果你有一個包含「abcd」的字符串s,執行s.substr(0,1)會給你一個包含「a」的字符串,而s.substr(1,3)會給你一個包含「bcd」的字符串。

+1

std :: string沒有子字符串方法 -​​ 這是C#。誰在投票呢? – 2011-06-13 22:08:37

+0

爲什麼還有這樣的降價?它已被糾正。 – Tim 2011-06-14 01:05:16

+0

@Tim:當答案「糾正」時,downvotes不會自動消失。 – 2011-06-15 23:41:19

0
TCHAR s[] = _T("abcd"); 

// Get 'a' 
TCHAR c = s[0]; 

// Get "bcd" 
TCHAR *p = s + 1; 
+0

僅供參考,'TCHAR'不是ANSI/ISO C或C++的一部分。雖然OP沒有指定字符串格式。 – 2011-06-13 22:23:35

+0

@Thomas:我不知道我說的是哪裏。你因爲我存在的代碼味道而投票給我? – 2011-06-13 23:03:45

+0

我沒有投票給你。我只是說'TCHAR'不是ANSI C或C++。一般來說,當OP沒有提供平臺信息時,其目標是提供符合ANSI標準的答案。 「TCHAR」是微軟的一項發明。 – 2011-06-14 16:26:45