#CS402. 阅读程序-字符处理

阅读程序-字符处理

阅读程序

注意:切勿用电脑直接运行代码得出答案,请用大脑+笔+纸运行代码答题,否则是在浪费你的时间。

第2节:字符处理

第1题【NOIP】2018

#include <stdio.h>

char st[100];


int main() {

    scanf("%s", st);

    for (int i = 0; st[i]; ++i) {

        if (‘A’ <= st[i] && st[i] <= ‘Z’)

        st[i] += 1;

    }

    printf("%s\n", st);

    return 0;

}

判断题

(1)第5行的循环将执行n次,n为字符串长度。

{{ select(1-1) }}

(2)输人的字符串必须由大写字母组成。

{{ select(1-2) }}

(3)输出最多含有25种大写字母。

{{ select(1-3) }}

(4)若输入的字符串由n种不同字符组成,则输出由n种不同字符组成。

{{ select(1-4) }}

●选择题

(5)输入QuanGuo,则输出的结果是()。

{{ select(1-5) }}

  • RuanHuo
  • quanguo
  • QuanGuo
  • PuanFuol

(6)如果将第07行的st[i]+=1;改成st[i]-=1;则第(5)题的输出结果为()

{{ select(1-6) }}

  • QUANGUO
  • PuanFuo
  • quanguo
  • QvboGvp

第2题【NOIP】2016

#include <iostream>

using namespace std;

int main()

{

    int i, length1, length2;

    string s1, s2;

    s1 = "I have a dream.";

    s2 = "I Have A Dream.";

    length1 = s1.size();

    length2 = s2.size();

    for (i = 0; i < length1; i++)

        if (s1[i] >= 'a' && s1[i] <= 'z')

            s1[i] -= 'a' - 'A';

    for (i = 0; i < length2; i++)

        if (s2[i] >= 'a' && s2[i] <= 'z')

            s2[i] -= 'a' - 'A';

    if (s1 == s2)

        cout << "=" << endl;

    else if (s1 > s2)

        cout << ">" << endl;

    else

        cout << "<" << endl;

    return 0;

}

●判断题

(1)第6行输人的字符串如果包括数字、各类符号,可能运行错误。

{{ select(2-1) }}

(2)若length1<length2,输出为“<”。

{{ select(2-2) }}

(3)若去掉第10、13行,输出结果不变。

{{ select(2-3) }}

(4)若sl和s2中的各字符互不相同,则输出一定不为“=”。

{{ select(2-4) }}

●选择题

(5)输人Welcome与Chinese,count的结果是( )。

{{ select(2-5) }}

  • <
  • =
  • 0

(6)若字符串的长度为n,则算法的时间复杂度是( )。

{{ select(2-6) }}

  • O(n)
  • O(nlog2nnlog^2n)
  • O(n2n^2)
  • O(nlogn)

第3题【NOIP】2014

#include <iostream>

#include <string>

using namespace std;

int main()

{

    string    st;

    int    i, len;

    getline( cin, st );

    len = st.size();

    for ( i = 0; i < len; i++ )

        if ( st[i] >= 'a' && st[i] <= 'z' )

            st[i] = st[i] - 'a' + 'A';

    cout << st << endl;

    return(0);

}

●判断题

(1)输人的字符串可以是任意字符,包括字母、数字、各类符号甚至中文汉字。

{{ select(3-1) }}

(2)如果去掉第10行,输出结果不变。

{{ select(3-2) }}

(3)输出结果可以包含小写字母

{{ select(3-3) }}

(4)算法时间复杂度为O(1)。

{{ select(3-4) }}

●选择题

(5)输人Hello,输出的结果是()。

{{ select(3-5) }}

  • HELLO
  • hello
  • Hello
  • ello

(6)输出的结果不可能是()。

{{ select(3-6) }}

  • WELCOME
  • WELCOME-1
  • Welcome
  • ELCOME

第4题【NOIP】2008

#include <iostream>
#include <cstring>
using namespace std;
int i,j,len;
char s[50];

int main()
{
	cin >>s;
	len = strlen(s);
	for (i = 0;i < len; ++i)
	{
		if (s[i] >= 'A' && s[i] <= 'Z') s[i] -= 'A' - 'a';
	}
	for (i = 0;i < len; ++i)
	{
		if (s[i] < 'x') s[i] += 3; else s[i] += -23;
	}
	cout << s << '/';
	for (j = 1;j < 4;j ++)
	{
		for (i = 0;i < len-j; i = i + j)
		{
			s[i] = s[i + j] ;
		}
	}
	cout << s << endl;
	return 0;
}

●判断题

(1)输入的字符串长度为n,则输出的字符审长度为2n.

{{ select(4-1) }}

(2)如果去掉第18行,输出结果不变。

{{ select(4-2) }}

(3)若输入仅有字母,输出结果可以包含大写字母。

{{ select(4-3) }}

(4)算法时间复杂度为O(1)。

{{ select(4-4) }}

●选择题

(5)输入FGuvw,输出的结果是()。

{{ select(4-5) }}

  • ixxz/zxxzz
  • ixyz/xxzzz
  • ijxyz/ixzzz
  • ijxyz/zxzzz

(6)输出的结果不可能是()。

{{ select(4-6) }}

  • fmw/www
  • qpp/ppp
  • vgo/ooo
  • nouuuu

第5题【NOIP】2015

#include <iostream>

#include <string> 

using namespace std;


int main()

{

    string str;

    int i;

    int count; count = 0;

    getline( cin, str );

    for ( i = 0; i < str.length(); i++ )

        if ( str[i] >= 'a' && str[i] <= 'z' )

            count++;

    cout << "It has " << count << " lowercases" << endl; return(0);

}

●判断题

(1)第7行输入的字符串可以是任意字符,包括字母、数字、各类符号甚至中文汉字及符号

{{ select(5-1) }}

(2)执行完第10行循环后,count的值可能为0。

{{ select(5-2) }}

(3)若去掉11行,输出结果不变。

{{ select(5-3) }}

(4)若输入的字符串中各字符互不相同,则count不为0。

{{ select(5-4) }}

●选择题

(5)输入CSP2001,count的结果是()

{{ select(5-5) }}

  • 3
  • 7
  • 8
  • 0

(6)若字符串的长度为n,算法的时间复杂度是()。

{{ select(5-6) }}

  • O(n)
  • O(nlogn)
  • O(n2n^2)
  • O(nlog2nnlog^2n)

第6题【NOIP】2009

#include <iostream>
using namespace std;

const int maxn=50;
void getnext(char str[])
{
	int l=strlen(str),i,j,k,temp;
	k=l-2;
	while(k>=0&&str[k]>str[k+1]) k--;
	i=k+1;
	while(i<l&&str[i]>str[k]) i++;
	temp=str[k];
	str[k]=str[i-1];
	str[i-1]=temp;
	for(i=l-1;i>k;i--)
		for(j=k+1;j<i;j++)
			if(str[j]>str[j+1])
			{
				temp=str[j];
				str[j]=str[j+1];
				str[j+1]=temp;
			}
	return ;
}

int main()
{
	char a[maxn];
	int n;
	cin >> a >> n;
	while(n>0)
	{
		getnext(a);
		n--;
	}
	cout << a << endl;
	return 0;
}

●判断题

(1)每次循环找到的k一定不同。

{{ select(6-1) }}

(2)如果把第18~20行换成awaptstr[1],str[j+1]),输出结果不变

{{ select(6-2) }}

(3)去掉第32行会异致程序超时。

{{ select(6-3) }}

(4)输人的字符串可包含任意字母

{{ select(6-4) }}

●选择题

(5)输入NOIP3,输出的结果是( )

{{ select(6-5) }}

  • NPOI
  • NPIO
  • NIPO
  • PONI

(6)输入CSP2021 2,输出的结果是( )。

{{ select(6-6) }}

  • CPS2120
  • CSP2120
  • CPS2210
  • CSP2021

第7题【NOIP】2010

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    char m1, m2;
    int i;
    
    getline(cin, s);
    m1 = ' ';
    m2 = ' ';
    for (i = 0; i < s.length(); i++)
        if (s[i] > m1) {
            m2 = m1;
            m1 = s[i];
        }
        else if (s[i] > m2)
            m2 = s[i];
    cout<<int(m1)<<' '<<int(m2)<<endl;
    return 0;
}

●判断题

(1)去掉第10、11行,程序会运行错误。

{{ select(7-1) }}

(2)去掉第18行的else,程序会运行错误。

{{ select(7-2) }}

(3)将12行替换为“for (i=s.length()-1;i>=0;i--)”,运行结果不变

{{ select(7-3) }}

(4)将18行的“s[i]>m2”替换为“s[i]>=m2”,运行结果不变。

{{ select(7-4) }}

●选择题

(5)当输入为AABBCCDD时,输出为()。

{{ select(7-5) }}

  • BA
  • CB
  • D D
  • D A

(6)当输入的字符串为大写字符串时,输出不可能为()。

{{ select(7-6) }}

  • Z B
  • AB
  • T B
  • G A

第8题【NOIP】2011

#include<iostream>

#include<string>

using namespace std;


int main()

{

    string map= "2223334445556667778889999";

    string tel;

    int i;

    cin>>tel;

    for(i=0;i<tel.length();i++)

       if((tel[i]>='0') && (tel[i]<='9') )

           cout<<tel[i];

       else if( (tel[i]>='A') && (tel[i]<='Z'))

           cout<<map[tel[i]-'A'];

    cout<<endl;

    return 0;

}

●判断题

(1)第7行输人的字符事可以是任意字符,包括字母、数字、各类符号甚至中文汉字及符号()

{{ select(8-1) }}

(2)如果去掉第13行,程序无运行错误。

{{ select(8-2) }}

(3)输出结果可以包含大写字母。

{{ select(8-3) }}

(4)输出的字符串至多包含8种不同数字

{{ select(8-4) }}

●选择题

(5)输人CCF-NOIP-2011,输出的结果是( )。

{{ select(8-5) }}

  • 22366472011
  • 223-6647-2011
  • 22366472011
  • 22366482011

(6)输入 WELCOME-CSP,输出的结果是( )。

{{ select(8-6) }}

  • 9352663277
  • 9342663277
  • 9342663278
  • 9342663377

第9题【NOIP】2012

#include <iostream>
#include <string>
using namespace std;
int n,i,j,ans;
string s;
char get(int i)
{
    if(i<n) return s[i];
    else return s[i-n];   
}
int main()
{
    cin>>s;
    n=s.size();
    ans=0;
    for(i=1;i<=n-1;i++)
    {
        for(j=0;j<=n-1;j++)
            if(get(i+j)<get(ans+j))
            {
                ans=i;
                break;    
            }
            else if(get(i+j)>get(ans+j)) break;
    }
    for(j=0;j<=n-1;j++) cout<<get(ans+j);
    cout<<endl;
    return 0;
}

●判断题

(1)删除第15行程序,运行结果不会发生变化

{{ select(9-1) }}

(2)将第16行中的i-1改为i=0,运行结果不变

{{ select(9-2) }}

(3)在17,18行中间插入“if(get(i+j)==get(ans+j))continue;”运行结果不变

{{ select(9-3) }}

(4)将21行的break换成continue,因为这是for语句的最后一句,所以运行结果不变

{{ select(9-4) }}

●选择题

(5)当输人为ABCDEFG时,输出结果为( )

{{ select(9-5) }}

  • ABCDEFG
  • GFEDCBA
  • ACEGFDB
  • AGBFCED

(6)当输入为CBBADADA时,输出结果为()。

{{ select(9-6) }}

  • ABABCDAD
  • ABBCDADA
  • ACBBADAD
  • ADADACBB

第10题【NOIP】2016

#include <iostream> 

using namespace std;

int main()

{

    char a[100][100], b[100][100];

    string c[100];

    string tmp;

    int n, i = 0, j = 0, k = 0, total_len[100], length[100][3];

    cin >> n;

    getline(cin, tmp);

    for (i = 0; i < n; i++)

    {

        getline(cin, c[i]);

        total_len[i] = c[i].size();

    }

    for (i = 0; i < n; i++)

    {

        j = 0;

        while (c[i][j] != ':')

        {

            a[i][k] = c[i][j];

            k = k + 1;

            j++;

        }

        length[i][1] = k - 1;

        a[i][k] = 0;

        k = 0;

        for (j = j + 1; j < total_len[i]; j++)

        {

            b[i][k] = c[i][j];

            k = k + 1;

        }

        length[i][2] = k - 1;

        b[i][k] = 0;

        k = 0;

    }

    for (i = 0; i < n; i++)

    {

        if (length[i][1] >= length[i][2])

            cout << "NO,";

        else

        {

            k = 0;

            for (j = 0; j < length[i][2]; j++)

            {

                if (a[i][k] == b[i][j])

                    k = k + 1;

                if (k > length[i][1])

                    break;

            }

            if (j == length[i][2])

                cout << "NO,";

            else

                cout << "YES,";

        }

    }

    cout << endl;

    return 0;

}

●判断题

(1)若输入的字符串不包括‘:’,可能运行错误。

{{ select(10-1) }}

(2)若n1 且length[i][1]<lenath[i][2],输出为“YES,”。

{{ select(10-2) }}

(3)若去掉第40、41行,输出结果不变。

{{ select(10-3) }}

(4)输出结果为一行字符串。

{{ select(10-4) }}

●选择题

(5)输入1 AB:ACDEbFBkBD.输出的结果是( )。

{{ select(10-5) }}

  • YES,
  • NO,
  • 运行错误
  • 运行超时

(6)输入1 AR:ACDBrT,输出的结果是()。

{{ select(10-6) }}

  • YES,
  • NO,
  • 运行错误
  • 运行超时

第11题【NOIP】2018

#include <iostream>

using namespace std;

string s;


long long magic(int l, int r) {

    long long ans = 0;

        for (int i = l; i <= r; ++i) {

        ans = ans * 4 + s[i] - ‘a’ + 1;

    }

return ans;

}


int main() {

    cin >> s;

    int len = s.length();

    int ans = 0;

    for (int l1 = 0; l1 < len; ++l1) {

        for (int r1 = l1; r1 < len; ++r1) {

            bool bo = true;

            for (int l2 = 0; l2 < len; ++l2) {

                for (int r2 = l2; r2 < len; ++r2) {

                    if (magic(l1, r1) == magic(l2, r2) 

                        && (l1 != l2 || r1 != r2)) 

                        bo = false;

                }

            }

            

            if (bo) {

                ans += 1;

            }

        }

    }

    cout << ans << endl;

    return 0;

}

●判断题

(1)输出一定不为0。

{{ select(11-1) }}

(2)将15、16行与18、19行对调,答案不变。

{{ select(11-2) }}

(3)输人字符串最多包含5种字符串,若更多则容易互相冲突。

{{ select(11-3) }}

(4)调用第12行需要iostream库头。

{{ select(11-4) }}

●选择题

(5)输人abacaba,则输出的结果是()。

{{ select(11-5) }}

  • 16
  • 17
  • 18
  • 19 (6)输人abechbce,则输出的结果是

{{ select(11-6) }}

  • 16
  • 20
  • 18
  • 19