這可能是一個愚蠢的問題,但如果我有一個C++字符串如下,從C++字符串,刪除EOL但保留「 0」
str = "the cat is black\n"
如果我刪除最後一個字符,即「\ n ',這是否給我一個空字符串?下面的語句是否在從原始字符串str創建空終止的char *時起作用?
char *c = str.erase(str.size()-1).c_str();
這可能是一個愚蠢的問題,但如果我有一個C++字符串如下,從C++字符串,刪除EOL但保留「 0」
str = "the cat is black\n"
如果我刪除最後一個字符,即「\ n ',這是否給我一個空字符串?下面的語句是否在從原始字符串str創建空終止的char *時起作用?
char *c = str.erase(str.size()-1).c_str();
是的,std :: string :: c_str()將始終返回一個以null結尾的字符串。
謝謝!我理解,只要它是一個c.str(),那麼'\ 0'終止是自動的, – MikeRin
如果它是一個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();
^^^^^
也是有效的前提是字符串中包含換行字符或空。
您通過在其中移動「\ 0」來移除最後一個字符,因爲「\ 0」會終止該字符串。 –
@Rhymoid:這有點簡化......字符串通常也會有一個長度字段被更新,如果你願意,你可以在字符串中間有一個'\ 0'。 –
對於C''\ n''刪除,請參閱http://stackoverflow.com/q/2693776/2410359 – chux