2015-02-10 173 views
-2

如何用下劃線替換每個出現(字符串中)的空格?如何使用C++用下劃線替換字符串中空白的出現?

我只可以使用下列標準頭:

  • <iostream>
  • <string>
  • <cctype>
+0

什麼庫? – genisage 2015-02-10 00:10:17

+1

您沒有使用帖子預覽。 :(你有沒有考慮搜索現有的問題和研究材料,用字符串中的其他字符替換字符? – 2015-02-10 00:10:18

+1

這將是一個確切的http://stackoverflow.com/q/2896600/560648重複,如果它不是爲了什麼看起來像對你可能使用什麼標題完全是任意的限制家庭作業?你有沒有嘗試過任何東西? – 2015-02-10 00:11:55

回答

0

沒有單一的C++字符串的方法來做到這一點 - 你需要一個循環:

// C++ replace all 
#include <cctype.h> 
... 
string string replaceChar(string str, char new_char) { 
    for (int i = 0; i < str.length(); ++i) { 
    if (isspace((unsigned char)str[i])) 
     str[i] = new_char; 
    } 
    return str; 
} 

如果你碰巧有一個空終止的C字符串,你可以這樣做:

/* C replace all */ 
#include <ctype.h> 
... 
char *replaceChar (char *str, char new_char) { 
    char *p = str; 
    unsigned char c; 
    while (c = *p) { 
     if (isspace(c)) 
     *p = new_char; 
     p++; 
    } 
    return str; 
} 

附錄:廣義的解決方案中使用「isspace爲()」:替換所有「空白」字符。

+0

除了'std :: replace',沒有單個C++字符串方法? – 2015-02-10 00:22:46

+0

此外,這隻替換一個字符,而不是所有空白 – 2015-02-10 00:23:15

+0

@Mooing Duck - std :: string :: repla ce不會「全部取代」,是不是「? – FoggyDay 2015-02-10 00:25:40

0

蠻力方法:

std::string text = "Is the economy getting worse?"; 
const unsigned int length = text.length(); 
for (unsigned int i = 0; i < length; ++i) 
{ 
    if (text[i] == ' ') 
    { 
    text[i] = '_'; 
    } 
} 

只有頭<string>是必需的。

1

最明顯的方法似乎是:

for (size_t i=0; i<s.size(); i++) 
    if (isspace((unsigned char)s[i])) 
     s[i] = '_'; 

注意幾個要點:

  1. 你想用isspace,不能直接比較的空格字符。如果你這樣做,你會錯過標籤等東西。
  2. 在傳遞到isspace之前,您想將角色投射到unsigned char。否則,它可能(並且通常會)在基本ASCII字符集之外的字符(例如帶有重音/變音符號的字母)方面存在問題。
相關問題