作者ric2k1 (Ric)
看板EE_DSnP
标题[情报/整理] HW#3 reference code 更正
时间Sun Nov 19 05:04:15 2006
就整理在这边吧... 如有新加 (希望不会 XD), 会用 repost...
==== post 119 ====
1. In top-level Makefile
Comment out "@strip bin/$(EXEC)"
==> # @strip bin/$(EXEC)
2. In src/Makefile.in
Swap the comments for CFLAGS
==> #CFLAGS = -O3 -Wall $(PKGFLAG)
CFLAGS = -g -Wall $(PKGFLAG)
==== post 120 ====
There is an typo in file "calcCmd.cpp" ---
[Compilation error message]
calcCmd.cpp:65: error: 'getValue' is not a member of 'ModNum'
Please change it to:
if (!ModNum::
getStrVal(options[1], v))
==== post 130 ====
ModNum::ModNum(const string& str);
的定义是 "从 ModNum::_varMap 中撷取 varname = str 的变数的值, 如果没有找到,
就 assign ModNum 的 default constructor."
不果如果你将它定义成 "将string parse成ModNum", 只要是不会影响整个作业要求的
commands 的 behavior, 应该也是没有关系的.
==== post 131 ====
mcalc> msub x 3 5
x(5) = 3 + 5
应为 ---
x(5) = 3 - 5
==== post 145 ====
"cmdParser.cpp" 有一个 typo, 请修正 ---
370 bool
371 CmdExec::lexOptions
372 (const string& option, vector<string>& tokens, size_t nOpts) const
373 {
......
381 if (tokens.size() > nOpts) {
382 errorOption(CMD_OPT_EXTRA, tokens[2]);
383 return false;
384 }
385 }
382 行应改为 ---
381 if (tokens.size() > nOpts) {
382 errorOption(CMD_OPT_EXTRA, tokens[nOpts]);
383 return false;
384 }
==== post 152 ====
If we define "ModNum::_num" as unsigned, there may be problems in
constructing ModNum from negative integer.
An easy way to solve this is to change "ModNum::_num" to "int" type.
Please change the "unsigned" in the following code to "int", or download
hw3.tgz again...
calc/calcModNum.h:19: ModNum(unsigned i = 0);
calc/calcModNum.h:27: static void setModulus(unsigned m) { _modulus = m;
}
calc/calcModNum.h:28: static unsigned getModulus() { return _modulus; }
calc/calcModNum.h:56: unsigned _num;
calc/calcModNum.h:58: static unsigned _modulus;
calc/calcCmd.cpp:27: if (ModNum::getModulus() != unsigned(m)) {
==== post 152 ====
In "myStrNCmp(const string& s1, const string& s2, unsigned n)", the
comparison will be wrong if the string s2 is a superset of s1. For example,
s1 = "HELp", s2 = "HELpkk", n = 3 ---
we will see the comparison result = 0 (i.e. equivalent), which is NOT
correct. We should return a negative integer (i.e. s1 < s2).
=============
int
myStrNCmp(const string& s1, const string& s2, unsigned n)
{
assert(n > 0);
if (s2.size() == 0) return -1;
unsigned l = s1.size();
assert(l >= n);
for (unsigned i = 0; i < l; ++i) {
if (!s2[i])
return (i < n)? 1 : 0;
char ch1 = (isupper(s1[i]))? tolower(s1[i]) : s1[i];
char ch2 = (isupper(s2[i]))? tolower(s2[i]) : s2[i];
if (ch1 != ch2)
return (ch1 - ch2);
}
return (l - s2.size());
}
======
The red lines are modified.
==== post 160 ====
calcCmd.cpp 应做修正---
23 int m;
24 if (!myStr2Int(token, m)
|| (m <= 0))
25 return CmdExec::errorOption(CMD_OPT_ILLEGAL, token);
绿色的部份为新增的 code...
==== post 169 ====
在calcCmd.cpp的MvarCmd::exec(const string& option)里面
请改成 ---
if (!CmdExec::lexOptions(option, options, 2))
return CMD_EXEC_ERROR;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.133.66
1F:→ ric2k1:呵 拍谢 还真多 11/19 05:04
2F:→ ric2k1:请确认你交上来的 code 有包含以上的更正!! 11/19 05:05