#2579: 第五個測資


ckck18 (cKcK)

學校 : 國立交通大學
編號 : 7981
來源 : [180.218.37.143]
最後登入時間 :
2013-09-19 23:58:22
d252. 94北縣賽-4-字串處理問題 (String) -- 94學年度北基區資訊學科能力競賽 | From: [61.60.218.110] | 發表日期 : 2009-10-31 20:21

*** 第 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;

可以請教一下哪邊有問題嗎?目前還找不到問題點在哪?謝謝 

 
#7117: Re:第五個測資


holydc (holydc)

學校 : 不指定學校
編號 : 28129
來源 : [36.231.117.142]
最後登入時間 :
2015-02-16 21:14:53
d252. 94北縣賽-4-字串處理問題 (String) -- 94學年度北基區資訊學科能力競賽 | From: [122.146.84.72] | 發表日期 : 2012-10-25 19:46

*** 第 5 點 (20%):WA (line:1) 您的答案為: HEL I AMROG.ppppppp 正確答案為: HEL I AFROGppppppp.


事隔多年,今天也遇到了同樣的問題
發現移動游標的時候如果有做 boundary check 就會導致這個結果

比方說我在程式中寫道

case '+': if (cursor > str) --cursor;

如果不考慮是否已經移到 string boundary,即拿掉 if (cursor > str) 的判斷就可以通過

這樣是否算測資有問題呢??

 
ZeroJudge Forum