爲了,從問題1:
以下編譯對我罰款:
#include <iostream>
#include <cstring>
std::string encode(std::string &x)
{
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
char *ptr;
for (size_t l=0;l<x.size();++l){
std::cout<<x[l];
std::cout<< std::strchr(alphabet,x[l]);
}
return x;
}
int main (int argc, char* argv []) {
return 0;
}
確保:
- 你可以列舉出了頭,用於
cout
和strchr
。
- 使用
std::
前綴,除非您使用std
命名空間。
- 修復
ptr
問題。
問題2:
如果你正在尋找一個方便的ROT-13的方法,可以考慮使用兩個C字符串,一個用於來源,一個用於翻譯:
char from[] = "abcdefghijklmnopqrstuvwxyz";
char to [] = "nopqrstuvwxyzabcdefghijklm";
然後,您可以使用strchr
在第一個中查找並使用該指針在第二個中查找等價物。
char src = 'j';
char *p = strchr (from, src);
if (p == NULL)
std::cout << src;
else
std::cout << to[p - from];
那倒原樣輸出,如果它沒有被發現或查找翻譯,如果它被發現的字符。你也可能想把大寫字母放在那裏。
問題3:
如果您想了解高效的算法,我會去的,令人驚訝的是,一個算法當然:-)計算
理論聽起來有點幹,但它可能很好地涵蓋算法背後的理論基礎。離散數學對算法具有適用性,但同樣可能非常理論化。這些都是基於這些詞的意思,當然,所涵蓋的實際學科領域可能完全不同,所以您應該接受提供課程的人的意見。
額外位:
如果你正在尋找的東西到你自己的工作比較,這裏有一個我放在一起基於我以上建議:
#include <iostream>
#include <cstring>
std::string rot13 (std::string x)
{
char from[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char to [] = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM";
std::string retstr = "";
for (size_t i = 0; i < x.size(); ++i) {
char *p = std::strchr (from, x[i]);
if (p == 0)
retstr += x[i];
else
retstr += to[p - from];
}
return retstr;
}
int main (int argc, char* argv []) {
std::string one = "This string contains 47 and 53.";
std::string two = rot13 (one);
std::string three = rot13 (two);
std::cout << one << '\n';
std::cout << two << '\n';
std::cout << three << '\n';
return 0;
}
返回的建築字符串可能已經被更有效地完成了(例如一個新的字符數組,它只在最後成爲一個字符串),但它很好地說明了該方法的「查找」部分。
輸出是:
This string contains 47 and 53.
Guvf fgevat pbagnvaf 47 naq 53.
This string contains 47 and 53.
,你可以驗證here,如果需要的話。
嘿,什麼是ptr? – nullpotent 2012-02-27 12:54:46
如果編譯失敗,你的編譯器錯誤/消息是什麼? – Zeta 2012-02-27 12:56:14
你能發佈編譯器錯誤嗎?此外,使用'ptr',但_never_未初始化。 – hmjd 2012-02-27 12:59:22