2015-02-10 57 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字符集之外的字符(例如带有重音/变音符号的字母)方面存在问题。