不是VIP会员,不能显示答案

题目解答

题目:
#include <iostream>

#include <string>

using namespace std;



char base [64] ;

char table [256] ;



void init ()

{

for (int i=0; i < 26; i++) base[i] = 'A' + i;

for (int i=0; i < 26; i++) base[26 + i] = 'a' + i;

for (int i=0; i < 10; i++) base[52 + i] = '0' + i;

base [62] = '+', base[63] = '/';



for (int i = 0; i < 256; i++) table[i] = 0xff;

for (int i = 0; i < 64; i++) table[base[i]]= i;

table ['='] =0;

}



string encode (string str)

{

string ret;

int i;

for (i=0; i + 3 <= str.size(); i+=3){

ret +=base [str [i] >> 2] ;

ret +=base [ (str [i] &0x03) <<4|str[i+1]>> 4];

ret +=base [ (str [i +1] &0x0f) <<2|str[i+2]>> 6];

ret += base [str [i+2] & 0x3f] ;

}

if (i < str.size()){

ret +=base [str [i] >> 2];

if (i+1==str.size () ) {

ret +=base [ (str [i] &0x03) <<4];

ret +="==";

}

else{

ret += base [ (str [i] & 0x03) <<4|str[i+1] >> 4];

ret += base [ (str [i +1] & 0x0f) << 2];

ret +="=";

}

}

return ret;

}



string decode (string str)

{

string ret;

int i;

for (i=0; i < str.size(); i +=4){

ret +=table [str [i] ] <<2|table[str[i+1]]>>4;

if (str[i + 2] != '=')

ret += (table[str[i+1]]& 0x0f) << 4|table[str[i+2]] >> 2;

if (str[i+3] != '=')

ret += table [str [i + 2] ] << 6|table[str[i +3]];

}

return ret;

}



int main ()

{

init () ;

cout << int(table[0])<< endl;

int opt;

string str;

cin >> opt >> str;

cout << (opt ? decode(str) : encode(str))<< endl;

return 0;

}




假设输入总是合法的(一个整数和一个不含空白字符的字符串,用空格隔开),完成下面的判断题和单选题:



判断题

1) 程序总是先输出一行一个整数,再输出一行一个字符串。( )

2) 对于任意不含空白字符的字符串str1,先执行程序输入“0 str1”,得到输出的第二行记为str2;再执行程序输入“1 str2”,输出的第二行必为str1.( )

3) 当输入为“1 SGVsbG93b3JsZA==”时,输出的第二行为“HelloWorld”。( )




选择题

4) 设输入字符串长度为 n,encode 函数的时间复杂度为( ).

5) 输出的第一行为( )。

6) (4分)当输入为“0 CSP2021csp”时,输出的第二行为( )。
考点:
分析:
解答:
评论:
老师: