冬令营Winter Camp字符串专题(Triple语言版)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冬令营Winter Camp字符串专题(Triple语言版)相关的知识,希望对你有一定的参考价值。

A - 雷同检测

考试的时候老师最讨厌有人抄袭了。自从有了电子评卷,老师要查找雷同卷,就容易多了,只要将两个人的答案输入计算机,进行逐个字符的比对,把相同的位置都找出来,就一目了然了。

输入格式

2 行,每行包含一串字符(长度不超过 200)。

输出格式

1 行,包含若干个以空格分隔的数字,表示出现相同字符的位置。

Sample Input

I am  suantoujun.
I am  huayemei.

Sample Output

1 2 3 4 5 6 8 9

题解:同时遍历两个字符串的相同位置,若字符相同则输出位置。

Java

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        for (int i = 0;i < s1.length() && i < s2.length(); i++) 
            if (s1.charAt(i) == s2.charAt(i))
                System.out.print((i+1)+" ");
        
    

C++

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1E5 + 7;

int main()

    string a, b;
    // 输入一行字符串
    getline(cin, a);
    getline(cin, b);
    for (int i = 0, j = 0; a[i] != '\\0' && b[j] != '\\0'; i++, j++)
    
        if (a[i] == b[i])
        
            cout << i + 1 << " ";
        
    
    return 0;

Python

a = input()
b = input()

i = 0
while i < len(a) and i < len(b):
    if a[i] == b[i]:
        print(i+1, end=" ")
    i += 1
    

B - 首字母大写

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。在字符串中,单词之间通过空白符分隔,空白符包括:空格(’ ‘)、制表符(’\\t’)、回车符(’\\r’)、换行符(’\\n’)。

输入格式

输入一行:待处理的字符串(长度小于80)。

输出格式

输出一行:转换后的字符串。

Sample Input

if so, you already have a google account. you can sign in on the right.

Sample Output

If So, You Already Have A Google Account. You Can Sign In On The Right.

题解:处理字符串,在字符串前面加一个空白符,然后只需要判读哪个字母前面是空白符把他变成大写,或者把空白符后紧挨着的第一个字母变成大写就行。

Java

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        s.replaceAll("\\t|\\n|\\r", " ");
        String[] x = s.split(" ");
        for (String str : x) 
            System.out.print(str.substring(0, 1).toUpperCase()+str.substring(1)+" ");
        
    

用自带的函数好像过不了

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        s = " " + s;
        char[] c = s.toCharArray();
        
        for (int i = 1; i < c.length; i++) 
            if (Character.isLowerCase(c[i]) && (c[i-1] == ' ' || c[i-1] == '\\t' || c[i-1] == '\\r' || c[i-1] == '\\n')) 
                c[i] -= 32;
            
//            System.out.print(c[i]);
        
        System.out.println(new String(c, 1, c.length-1));
    

C++

在字符串前面加上空格,字符串结尾是'\\0'

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 7;

int main()

    string a;
    string b = " ";
    getline(cin, a);
    b += a;
    for (ll i = 1; b[i] != '\\0'; i++)
    
        if (b[i] <= 'z' && b[i] >= 'a')
        
            if (b[i-1] == ' ' || b[i-1] == '\\t' || b[i-1] == '\\r' || b[i-1] == '\\n')
            
                b[i] -= 32;
            
        
        cout << b[i];
    
    return 0;

Python

a = input()

print(a.title())

当然也可以和上面的算法一样。

C - 大小写转换

读入一些字符串,将其中的小写字母转成大写字母(其他字符不变)。

输入格式

输入为多行,每行为一个字符串,字符串只由字母和数字组成,长度不超过80。输入以“End of file”结束。

输出格式

对于每行输入,输出转换后的字符串。

Sample Input

Hello
ICPC2004
12345abcde

Sample Output

HELLO
ICPC2004
12345ABCDE

用“scanf("%s", str) == 1”这个条件可以判断输入是否结束。如果此条件为假,则输入结束(对于本题)。

Java

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) 
            System.out.println(sc.nextLine().toUpperCase());
        
    

C++

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 7;

int main()

    string a;
    while (cin >> a)
    
        for (ll i = 0; i < a.size(); i++)
        
            if (a[i] <= 'z' && a[i] >= 'a')
            
                a[i] -= 32;
            
        
        cout << a << endl;
    
    return 0;

while (cin >> a):输入到文件流尾部,可以一直输入

cin是输入操作符,cin>>a的过程是先取得从键盘的输入值a,并将a赋给cin,因此while(cin>>a)的意思就是只要输入的值有效,那么就执行while体内的语句。

Python

import sys

for s in sys.stdin:
    print(s.upper())

D - 数字反转

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零

输入格式

输入共 1 行,一个整数 NN。

输出格式

输出共 1 行,一个整数,表示反转后的新数。

数据范围

−1,000,000,000≤N≤1,000,000,000。

Sample Input

-380

Sample Output

-83

Java

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.print(a < 0 ? "-" : "");
        System.out.println(Integer.parseInt(new StringBuilder(String.valueOf(Math.abs(a))).reverse().toString()));
    

C++

题解:从后往前找到第一个不为零的位置,然后继续向前逐个输出(负号需要单独处理)。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main()

    string a;
    cin >> a;

    if (a.size() == 1)
    
        cout << a;
        return 0;
    
    ll s = 0;
    if (a[0] == '-')
    
        s = 1;
        cout << '-';
    
    ll i;
    bool flag = 0;
    for (i = a.size() - 1; i >= s; i--)
    
        if (a[i] == '0' && !flag)
            continue;
        else
            flag = 1;
        cout << a[i];
    
    return 0;

Python

a = input()
print('-' if a[0] == '-' else '', end='')
print(int(''.join(list(reversed(a))).replace('-', '')))

E - 删除单词后缀

给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为 00),否则不进行任何操作。

输入格式

输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为 32)。

输出格式

输出按照题目要求处理后的单词。

Sample Input

referer

Sample Output

refer

Java

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        if (s.endsWith("er") || s.endsWith("ly")) 
            System.out.println(s.substring(0, s.length()-2));
         else if (s.endsWith("ing")) 
            System.out.println(s.substring(0, s.length()-3));
         else 
            System.out.println(s);
        
    

C++

题解:从后往前找到第一个不为零的位置,然后继续向前逐个输出(负号需要单独处理)。

#include <stdio.h>
#include <math.h>
#include <string.h>

int main()

    char str[33];
    scanf("%s", str);
    int l, i;
    l = strlen(str);
    if (str[l-1]=='r' && str[l-2]=='e' || str[l-1]=='y' && str[l-2]=='l')
		str[l-1]='\\0';
        str[l-2]='\\0';
        puts(str);
     else if (str[l-3]=='i'&&str[l-2]=='n'&&str[l-1]=='g') 
		str[l-1]='\\0';
		str[l-2]='\\0';
		str[l-3]='\\0';
		puts(str);
	 else 
		puts(str);
	
	return 0;

Python

a = input()

if a.endswith(('er', 'ly')):
    print(a[:-2])
elif a.endswith('ing'):
    print(a[:-3])
else:
    print(a)

F - 判断字符串是否为回文

输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。

输入格式

输入为一行字符串(字符串中没有空白字符,字符串长度不超过 100)。

输出格式

如果字符串是回文,输出"yes";否则,输出"no"。

Sample Input

abcdedcba

Sample Output

abcdedcba

题解:两个指针分别从前往后和从后往前遍历字符串判断对应位置是否字符相同(前指针的位置要小于等于后指针)。

Java

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        System.out.println(new StringBuilder(s).reverse().toString().equals(s) ? "yes" : "no");
    

C++

#include<bits/stdc++.h>
using namespace std;

typedef long long ll ;
const ll N = 1e5 + 7 ;

int main()

    string a;
    cin >> a;
    for (ll i = 0, j = a.size()-1; i <= j;i++, j--)