*** 第 5 點 (20%):WA (line:1) 您的答案為: HEL I AMROG.ppppppp 正確答案為: HEL I AFROGppppppp.
code 如下:
#include <iostream>
#include <string>
using namespace std;
void opcode(string& op, string& str)
{
int i;
char tmp1, tmp2;
// pointer to string
string::iterator itr = str.begin();
for( i = 0 ; i != op.size() ; i++ )
{
switch( op[i] )
{
case '0' : // pointer to begin
itr = str.begin();
break;
case '$' : // pointer to end
itr = str.end();
break;
case 'x' : // erase
if( itr != str.end() ) { str.erase(itr); }
break;
case 's' : // swap
if( itr != str.end() ) {
if( itr != str.end() - 1 ) {
tmp1 = *itr;
*itr = *(itr+1);
*(itr+1) = tmp1;
}
}
break;
case 'i' : // insert
tmp2 = op[i+1];
str.insert(itr, tmp2);
++itr;
++i;
break;
case 'u' : // set UPPER
if( *itr >= 'a' && *itr <= 'z' ) { *itr = *itr - 'a' + 'A'; }
++itr;
break;
case '+' : // back
if( itr != str.end() ) { ++itr; }
break;
case '-' : // forward
if( itr != str.begin() ) { --itr; }
break;
default :
break;
}
}
}
int main()
{
string line, op;
while( getline(cin, line) )
{
getline(cin, op);
opcode(op, line);
cout << line << '\n';
}
return 0;
}
可以請教一下哪邊有問題嗎?目前還找不到問題點在哪?謝謝
*** 第 5 點 (20%):WA (line:1) 您的答案為: HEL I AMROG.ppppppp 正確答案為: HEL I AFROGppppppp.
事隔多年,今天也遇到了同樣的問題
發現移動游標的時候如果有做 boundary check 就會導致這個結果
比方說我在程式中寫道
case '+': if (cursor > str) --cursor;
如果不考慮是否已經移到 string boundary,即拿掉 if (cursor > str) 的判斷就可以通過
這樣是否算測資有問題呢??