牛客练习题

1. 指针问题

很多人包括我,总是被这些数组指针和指针数组搞混,以前会了过段时间却又忘了,余不才提供一种方法:理清楚数组符号[]和谁搭配,就容易搞懂这些问题了。

比如char a[10],char和[10]搭配,意思是10个字符长的字符数组,a就是一个这样的字符数组。

那么char *a[10]呢?char*是字符指针,char*和[10]搭在一起,意思是10个字符指针长的字符指针数组,a就是这样一个字符指针数组。

而char(*a)[10]呢?因为有括号,*是和a结合在一起,而char是和[10]在一起,则是10个字符长的字符数组,*a是这样的一个字符数组,也就是说a是指向这样一个字符数组的指针。

typedef  char T[10]呢?char和[10]搭在一起,意思是10个字符长的一个数组,typedef定义了T是char[10]这样的一种数据类型。

T * a;*应该和a搭在一起,所以a就是指向T这样一种数据类型的指针,所以等价于char (*a)[10]

2. 字符串压缩

对字符串进行 RLE 压缩,将相邻的相同字符,用计数值和字符值来代替。例如:aaabccccccddeee,则可用 3a1b6c2d3e 来代替。

def rle_compress(s):
    output_s = ''
    c = 1
    for i in range(1,len(s)) :
        if s[i] == s[ i- 1] :
            c += 1
        else:
            output_s += str(c) + s[i - 1]
            c = 1
    
    output_s += str(c) + s[-1]
    return output_s

input_s = input()
a = rle_compress(input_s)
print(a)

 3.解析加减法运算
输入字符串:"1+2+3" 输出:"6"
输入字符串:"1+2-3" 输出:"0"
输入字符串:"-1+2+3" 输出:"4"
输入字符串:"1" 输出:"1"
输入字符串:"-1" 输出:"-1"
已知条件:输入的运算都是整数运算,且只有加减运算。要求:输出为String类型,不能使用内建的eval()函数

def cal(s):
    num = 0
    sign = 1
    result = 0
    for i in s :
        if i.isdigit():
            num = num*10 + int(i)
        if i == '+':
            result += sign*num
            num = 0
            sign = 1
        if i == '-':
            result += sign*num
            num = 0
            sign = -1
    result += sign*num
    return  result
     
a = cal(input())
print(a)

4.求连续子数组的最大和

一个非空整数数组,选择其中的两个位置,使得两个位置之间的数和最大。如果最大的和为正数,则输出这个数;如果最大的和为负数或 0 ,则输出 0。

def findnum(ls):
    max_sum = ls[0]
    current_sum = ls[0]
    for i in range(1,len(ls)):
        current_sum = max( ls[i], current_sum + ls[i] )
        max_sum = max(max_sum,current_sum)
    return max_sum if max_sum>0 else 0


a = list(map(int,input().split(',')))
b = findnum(a)
print(b)

5.输入字符串,大变小,小变大

def swapstr(input_str):
    output_str = ''
    for char in input_str:
        if char.islower():
            char = char.upper()
            output_str += char
        elif char.isupper():
            char = char.lower()
            output_str += char
        else:
            output_str +=char
    return output_str

a = input()
b = swapstr(a)
print(b)

 6.在目标文件夹里找.sh和.raw文件,并分类保存

import os 
import shutil

def findshraw(target_folder,sh_folder,raw_folder):
    if not os.path.isdir(sh_folder):
        os.mkdir(sh_folder)
    if not os.path.isdir(raw_folder):
        os.mkdir(raw_folder)

    for file_name in os.listdir(target_folder):
        file_path = os.path.join(target_folder, file_name)
        if os.path.isfile(file_path):
            file_extension = os.path.splitext(file_name)[-1].lower()
            
            if file_extension == '.sh':
                shutil.move(file_path,os.path.join(sh_folder,file_name))
            
            if file_extension == '.raw':
                shutil.move(file_path,os.path.join(raw_folder,file_name))

7.Linux

dd:删除当前行(0:返回行首)
ndd:删除光标行往下n行(含光标行)内容
dgg:删除光标当前行及以上内容
dG:删除光标当前行及以下内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值