2016-02-18 83 views
1

這可能是一個愚蠢的問題,但如果我有一個C++字符串如下,從C++字符串,刪除EOL但保留「 0」

str = "the cat is black\n" 

如果我刪除最後一個字符,即「\ n ',這是否給我一個空字符串?下面的語句是否在從原始字符串str創建空終止的char *時起作用?

char *c = str.erase(str.size()-1).c_str(); 
+0

您通過在其中移動「\ 0」來移除最後一個字符,因爲「\ 0」會終止該字符串。 –

+4

@Rhymoid:這有點簡化......字符串通常也會有一個長度字段被更新,如果你願意,你可以在字符串中間有一個'\ 0'。 –

+0

對於C''\ n''刪除,請參閱http://stackoverflow.com/q/2693776/2410359 – chux

回答

0

如果它是一個C字符串例如

char str[] = "the cat is black\n"; 

可以做到這一點像

str[strcspn(str, "\n")] = '\0'; 

如果是std::string類型的對象例如

std::string str("the cat is black\n"); 

你可以寫

if (str.back() == '\n') str.erase(str.size() - 1); 

if (!str.empty() && str.back() == '\n') str.erase(str.size() - 1); 

本聲明

const char *c = str.erase(str.size() - 1).c_str(); 
^^^^^ 

也是有效的前提是字符串中包含換行字符或空。