簡體   English   中英

如何正確替換字符串c ++中的字符?

[英]How to correctly replace a character in a string c++?

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
string passCode;

passCode = "1 ";
int i;

for(i =0; i < passCode.length();i++){
if(isspace(passCode.at(i)) == true){

passCode.replace(i,1,"_");

}

}
cout << passCode << endl;
return 0;
}

上面的代碼,我的方向是[在2個字符的字符串passCode中用'_'替換任何空格''。 如果不存在空間,則程序不應打印任何內容。]

我的代碼目前的方式是,它輸出“1”。 當我運行條件檢查false而不是true時,它會打印“_”。 我不知道為什么這樣做,任何人都看到我不這樣做的問題? 我不被允許使用該算法。 頭。 我也只允許在main,沒有函數或導入的頭文件/類中工作。

對於單個字符,使用std::replace算法可能更容易:

std::replace(passCode.begin(), passCode.end(), ' ', '_');

如果您不能使用算法標題,您可以推出自己的replace功能。 它可以通過一個簡單的循環完成:

template<typename Iterator, typename T>
void replace(Iterator begin, Iterator end, const T& old_val, const T& new_val)
{
    for (; begin != end; ++begin)
        if (*begin == old_val) *begin = new_val;
}

我的代碼目前的方式是,它輸出“1”。 當我運行條件檢查false而不是true時,它會打印“_”

isspace在傳遞空格時返回非零值。 這不一定是1.另一方面,布爾值true通常設置為1。

當我們將isspace的返回值與true進行比較時,當它們不完全相等時會發生什么? 具體來說,如果true為1且isspace只返回一些非零值,該怎么辦?

我想這就是這里發生的事情。 if條件失敗,因為這兩個值是不同的值。 所以空間不會被'_'取代。

您的問題是您使用isspace 如果您閱讀isspace的文檔,它會說:

回報價值
如果確實c是空白字符,則值不等於零(即,為真)。 否則為零(即假)。

但是,您只檢查它是返回true還是false 您的編譯器應該警告您不匹配,因為isspace返回一個int並且您正在檢查bool

更改為以下代碼應該適合您:

if(isspace(passCode.at(i)) != 0) {
    passCode.replace(i,1,"_");
}

我的答案更具體地基於您的問題和您的評論,說除了您所包含的內容之外,您不能使用任何標題。 juanchopanza已經回答了一個更好的解決方案,你應該盡可能地使用標准庫,而不是編寫自己的代碼。

您也可以使用std::string::find控制while循環並使用std::string::replace空格。

std::string test = "this is a test string with spaces ";
std::size_t pos = 0;
while ((pos = test.find(' ', pos)) != std::string::npos)
{
    test.replace(pos, 1, "_");
    pos++;
}
std::cout << test;

實例

如上所述這里 ,isspace為不返回布爾。 相反,它返回int,其中非零值表示true,零值表示false。 您應該像這樣寫支票:

if (isspace(passCode.at(i)) != 0)

暫無
暫無

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

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