2014-02-15 76 views
0

我目前正在寫一個函數,用一個相應的數字加一個「,」來替換一行中的字母。我目前的代碼是:設置一個字符串等於一個int +「,」

std::string letterToNumber(std::string message) { 
    std::string::iterator iter; 
    toUpper(message); 

    for (iter = message.begin(); iter != message.end(); ++iter) { 
    for (int i = 0; i < alphabetSize; ++i) { 
     if (*iter == alphabet[i]) { 
     // Problem here 
     } 
    } 
    } 

    return message; 
} 

(toUpper是我自己的函數)。我不太清楚如何將字符串中的當前字母分配給數字+逗號。起初我試着給一個特定的字母分配一個數字,但我意識到我需要一個分隔符,所以我決定使用逗號。

+0

您能否提供測試用例和您的預期輸出?我不完全明白你的想法。 – herohuyongtao

+0

如果您要輸入「您好!」它會返回「8,5,12,12,15!」 – Michaelslec

+0

要獲得號碼,只需使用* num = message [i] - 'A'; *。 – herohuyongtao

回答

1

我猜你想達到什麼樣的是這樣的:

std::string letterToNumber(std::string input) { 
    toUpper(input); 
    std::stringstream output; 

    std::string::iterator it; 
    for (it = input.begin(); it != input.end(); ++it) { 
     if (input.begin() != it) { 
     output << ","; 
     } 
     int letterIndex = static_cast<int>(*it) - 'A'; 
     output << letterIndex; 
    } 

    return output.str(); 
} 
  • 它看起來更簡單,更高效的給我建立一個新的字符串,而不是嘗試編輯現有的一個,因爲自字母(1個字符)映射到幾個字符,您的初始字符串將需要幾個低效的副本和重新分配。
  • 要將字符轉換爲索引,可以使用ASCII字符自然排序且連續的事實。
  • 您可以爲非字母字符添加保護,例如數字和大多數標點符號將返回負數
+0

當我使用這個它給我的錯誤「C不命名一個類型」 – Michaelslec

+0

嗯,我想你可能不會使用C++ 11。讓我編輯前11 –

+0

好吧修好了!結果發現我的makefile在編譯時沒有-std = C++ 11選項。我以爲是。如果您可以重新發布C++ 11版本的代碼,那麼這款代碼非常棒,或者保持兩種版本,以便其他觀衆能夠看到!謝謝! – Michaelslec

相關問題