2013-11-21 38 views
1
#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() 
{ 
    string s = "Too many tags"; 
    for(int i = 0; i < s.size(); i++){ 
     if(!(isspace(s[i]))){ 
      s[i] = '#' + s[i]; 
     } 
    } 
    cout << s << endl; 
    return 0; 
} 

我試圖做一個程序,在字符串中的每個字母之前添加#標籤,但在輸出我得到奇怪的字母..我的錯誤在哪裏?字符串輸出給出奇怪的字母

+2

'S [i] =「#」 + s [i];'不代表你的想法。 –

回答

6
s[i] = '#' + s[i]; 

修改現有字符的值。如果你想新的字符添加到您的字符串,你應該使用insert

s.insert(i, "#"); 

正如馬克贖金指出,還需要通過你的字符串來移動一個進一步的字符,以避免不斷以前一樣添加「#」信。你可以做到這一點使用

s.insert(i++, "#"); 

請注意,您隨時都可以VladimirM的意見,並做出一些稍大的變化像

int i=0; 
while (i<s.size()) { 
    if (!isspace(s[i])) { 
     s.insert(i++, "#"); 
    } 
    i++; 
} 
+1

我想如果你這樣做而不修改循環,你會得到一個無限循環。 –

+0

謝謝,我已經更新了我的答案,現在就介紹這一點。 – simonc

+0

錯誤:從'char'到'const char *'的無效對話 – user3002211

4

這條線:

s[i] = '#' + s[i]; 

沒有做什麼你認爲是。 s[i]char,#也是char。將這些加在一起並不會給你兩個字符的連接,它會給你增加字符的整數代碼(所以對於#這樣的代碼是35,對於s[i]恰好是這樣的ASCII代碼)。

+0

我該如何解決這個問題,還有其他方法? – user3002211

2

我添加更多:我覺得簡單的方法是使用臨時變量,否則用「插入」你的循環會去無休止的循環,將掛起:

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() 
{ 
    string s = "Too many tags"; 
    string res = ""; 
    for(int i = 0; i < s.size(); i++){ 
     if(!(isspace(s[i]))){ 
      res += "#"; 
     } 
     res += s[i]; 
    } 
    cout << res << endl; 
    return 0; 
}