簡體   English   中英

從C ++中的字符串中刪除\\ r \\ n

[英]Remove \r from a string in C++

在C ++程序中,有一點是它讀取一個字符串,如:

"NONAME_1_1\r"

\\r給我帶來了麻煩。 我想它打印或添加類似“^ M”的東西。 這樣對嗎? 無論如何,它讓我陷入困境,我想擺脫它。

我無法修改輸入。 我想我怎么能在這一點上使用C ++,以最簡單的方式,為這個字符串刪除\\r

我知道如何在bash上做到這一點,但對C ++沒有任何線索。

謝謝。

我假設通過字符串,你的意思是std::string

如果它只是需要刪除的字符串的最后一個字符,則可以執行以下操作:

 
 
 
  
  mystring.pop_back();
 
  

mystring.erase(mystring.size() - 1);

編輯: pop_back()是C ++的下一個版本,抱歉。

有些檢查:

if (!mystring.empty() && mystring[mystring.size() - 1] == '\r')
    mystring.erase(mystring.size() - 1);

如果要刪除所有\\r ,您可以使用:

mystring.erase( std::remove(mystring.begin(), mystring.end(), '\r'), mystring.end() );

這取決於你如何將它保存在內存中:

  1. 如果它在std :: string中,只需檢查最后一個字節並刪除它,如果它是'\\r'
  2. 如果它在const char *中,你可以使用strncpy將字符串復制到另一個char數組中,有條件地抓取最后一個字節。
  3. 如果通過“我無法修改輸入”,您只是意味着您無法觸摸源文件,那么您可以選擇將其讀入char數組並將任何尾隨的'\\r'替換為'\\0'

在unix和windows之間移動文件后從文件中讀取行時,這是一個常見問題。

  • Unix變體使用“\\ n”(換行符)來終止行。
  • Windows使用“\\ r \\ n”(回車,換行)來終止行。

您可以運行“dos2unix”或“unix2dos”來轉換文件中的行。

如果您希望保持原始字符串不變,並且您希望在此示例中刪除多個字符(如CR和LF),則copy_if非常有用。

const std::string input = "Hello\r\nWorld\r\n";
std::string output;
output.reserve(input.length());

std::copy_if(input.begin(), input.end(),
           std::back_inserter(output),
           [] (char c) { return c != '\r' && c != '\n'; });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM