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:删除光标当前行及以下内容