1.1 字符串

1、字符串定义:单引号、双引号、三引号引用的对象
2、换行问题:单引号和双引号不可以直接换行,要在需换行处加\n;
3、不同引号个数的区别:
    外双内单,外单内双
    三引号也可以表示注释,或大段文字(方便换行,打印出来的也有空格和换行,如果文中有单双引,可以用三引)
4、字符串的元素
5、字符串不可变,有序
1.1.1 转义字符

字符串中有特殊意义或者特殊功能的符号,一般在特定符号前加\表示,如\0,\t,\n等,就称为转义字符

1.1.1.1 常用转义符
转义符名称意义
\n换行符相当于按回车
\t水平制表符相当于按一次Tab键
\'表示一个普通的单引号
\bbackspace键删除一个字符
1.1.1.2 举例
str1 = 'It's OK'        # invalid syntax,外双内单
str1 = 'abcde\b'  # backspace键
print(str1)
abcd
str1 = 'abcde\nfghij'  # 换行
print(str1)
abcde
fghij
1.1.1.3 去除转义的三种方法
filepath = 'D:\note1.txt'
print(filepath)
D:
ote1.txt

方案一 \n前面再加一个\

filepath = 'D:\\note1.txt'

方案二 字符串外面加一个r,表示后面的字符串的所有转义符均不生效

filepath = r'D:\note1.txt'

方案三 表示路径时,可以用/代替\,linux也可以

filepath = 'D:/note1.txt'
1.1.2 字符串编码

1.1.3 字符串操作
1.1.3.1 拼接(加法’+‘)

str1 + str2 将两个字符串合并成一个字符串

print('a' + 1)  # str 与int 不能相加或拼接,str()将对象转为str型,int()将对象转为int型
  • ‘字符串’+‘字符串’

  • ‘字符串’+数字

    • 报错

  • ‘字符串’*2

    • 打印两遍

1.1.3.2 乘法
1.1.3.2 下标 索引

  • str[0]到str[n-1]

  • str[-1]到str[-n]

  • 越界会报错

  • 字符串是不可变对象,不可以修改某一位的值

    • str[3]='d'

      • 报错

# 字符串的下标
# 下标从0开始,长度为n的字符串,最大下标是n-1
# 也可以使用负下标,最后一位下标是-1
str3 = 'abcdefg'
print(str3[2])
print(str3[-5])
str3[0] = 'q'  # 字符串是不可变对象,
# 下标越界string index out of range
str6 = ''
print(str6[0])
1.1.3.3 切片
# 字符串切片[起始值:终止值] 左含右不含
print(str3[0:3])
print(str3[:3])  # 表示从头开始
print(str3[:])  # 表示完整赋值

str3_new = str3[:]
print(id(str3_new), id(str3))  # 字符串是同个对象,列表是两个对象
# 字符串的切片生成的是新的对象,全取除外,字符串的切片不影响原对象,原对象不变
# edc
print(str3[4:1:-1])  # 步长为负数代表从右向左取值,所以起始值大于终止值才能取到值、
print(str3[-3:-6:-1])

1.1.5 字符串常用方法
方法
findprint(str1.find('c')) # 返回参数在对象中的位置 print(str1.find('g')) # 找不到时返回-1,在最后一位找到的返回正下标,不会返回-1
strip()
replace()
startswith()
endswith()
split()
 

案例:

str1 = 'abc'
str1.isdigit()  # 判断对象是否是纯数字,返回值是布尔型
str1.isalpha()  # 判断对象是否是纯字母,返回值是布尔型

# find
print(str1.find('c'))  # 返回参数在对象中的位置
print(str1.find('g'))  # 找不到时返回-1,在最后一位找到的返回正下标,不会返回-1

str2 = 'abcdefabcdefabcdef'
print(str2.find('c', 3))  # 也可以指定从第几位开始查找
print(str2.index('c', 3))  # index()用法与find()类似,找不到值抛异常

# strip()     # 去掉字符串前后的空格,或其他指定字符,不去字符串内部之间的空格
str3 = ' ******   烟 花 三 月下 扬 州  '
str3_new = str3.strip()
print(str3_new)
str6 = str3.strip('*')
print(str6)

# replace() 替换字符 replace(参数1,参数2) 参数1 需要替换的字符 参数2 替换后的字符
str9 = '   烟 花 三 月 下 扬 州    '
print(str9.replace(' ', ''))

str10 = '''<p>dddddufydiaufhahfurehguierhg</p>
<p>dsopfjeibnejioavsdkjcnf</p>'''
str10_new = str10.replace('<p>', '').replace('</p>', '')  # 返回值仍是str,仍可以用replace,isdigit()返回bool,find()返回数字不能这么用
print(str10_new)

# startswith()   判断字符串是否以某个或某些字符开头
# 判断一个身份证是否是南京的身份证
id_card = '320304199908187969'
if id_card.startswith('3201'):
    print('南京的身份证')

# endswith()    判断字符串是否以某个或某些字符结尾,返回值是布尔型
if True:  # '',none,0为FALSE,其他为真
    print(12345)

# split()           # 切割字符串,他有一个参数,作为分隔符,返回值是列表
str11 = 'adskajgakjg'
print(str11.split('d'))
# ['abc','efg']

str12 = 'cdecdec'
print(str12.split('c'))  # 如果切割符位于首位或末位,会产生空值
# ['', 'de', 'de', '']
1.1.6 格式化字符串
1.1.6.1 法一
1.1.6.2 法二
1.1.6.3 法三
a = 10
b = 8
print(str(a) + '+' + str(b) + '=' + str(a + b))  # 10+8 = 18
print('%s+%s=%s' % (a, b, a + b))  # 格式化字符串
# 格式化字符串
print(f'{a}+{b} = {a+b}')

# 方案一 %s字符串或数字均可,%d整数 %f浮点数
info1 = '我是%s,你是%s,他是%s,今年是%d年' % ('德华', '学友', '黎明', 2022)
# 前面用%d,后面用字符串,报错
# 前面用%s,后面用数字,不报错
# 前面的空位比后面的值多,报错
# 前面的空位比后面的值少,报错

# 补齐到指定位数,默认右对齐,左对齐加-号
# info1 = '我是%10s,今年是%10d年' % ('德华', 2022)
# 打印后是 我是        德华,今年是        2022年。

# info1 = '我是%-10s,今年是%-10d年' % ('德华', 2022)
# 打印后是 我是德华        ,今年是2022年        。

# 补0
# info1 = '我是%010s,今年是%010d年' % ('德华', 2022)
# 打印后是 我是        德华,今年是0000002022年。

# info1 = '我是%010s,今年是%-010d年' % ('德华', 2022)
# 打印后是 我是        德华,今年是2022      年。

# 补零,只补数字,<右侧补零,> 或不写是左侧补零
str1 = 'My name is {:10},your name is {:10},age is {:<010}.'.format('Clark', 'ralf', 21)
print(str1)

# %f 浮点型,默认保留六位小数,
number1 = '您输入的数字是%f' % (3.6)
print(number1)
# 3.600000

# 保留2位小数,
number1 = '您输入的数字是%.2f' % (3.6)

# 补齐到10位,保留两位小数
# number1 = '您输入的数字是%10.2f' % (3.6)
print(number1)

# 方案二 format
str1 = 'My name is {},your name is {},age is {}.'.format('Clark', 'ralf', 21)
print(str1)

# 补齐{:n}
# 字符串默认是左对齐,数字是右对齐,n是下限
str1 = 'My name is {:10},your name is {:10},age is {:10}.'.format('Clark', 'ralf', 21)
print(str1)

# My name is Clark     ,your name is ralf      ,age is         21.
# 修改对齐方式,{:<n}左对齐   {:>n}右对齐,{:^n}居中对齐
str1 = 'My name is {:>10},your name is {:^10},age is {:<10}.'.format('Clark', 'ralf', 21)
print(str1)

# 方案三f
a1 = 'Clark'
a2 = 'ralf'
a3 = 21
# str1 = f'My name is {a1},your name is {a2},age is {a3}.'
# str8 = f'My name is {a1:>10},your name is {a2:10},age is {a3:<10}.'
print(str1)
# 前面的空位比后面多,报错
# 前面的空位比后面少,不报错

'''
顺序取值法和下标取值法
'''
# 下标取值法(下标)
str1 = 'My name is {1:10}, your name is {2:10},age is {0:10}.'.format('Clark','Ralf',18)
str2= 'My name is {1}, your name is {2},age is {0}.'.format('Clark','Ralf',18)
print(str1)

# 顺序取值法
str1 = 'My name is {:10}, your name is {:10},age is {:10}.'.format('Clark','Ralf',18)
# 顺序取值法和下标取值法不能混用,否则报错
str3 = 'My name is {0}, your name is {2},age is {}.'.format('Clark','Ralf',18)

# 前面空位比后面多
# str4 = 'My name is {}, your name is {},age is {}.'.format('Clark','Ralf')
str5 = 'My name is {1}, your name is {1},age is {0}.'.format('Clark','Ralf')

# 前面空位比后面少,不报错
str6 = 'My name is {1}, your name is {1}.'.format('Clark','Ralf',18)

在C语言中,将字符串形式的IP地址(如 "192.168.1.1")转换成IPv4网络字节顺序(即big-endian字节顺序)可以通过使用标准库函数`inet_addr`实现。这个函数接受一个点分十进制表示的IP地址的字符串形式,并返回一个无符号长整型数值,该数值就是网络字节顺序的IPv4地址。 下面是一个转换的示例代码: ```c #include <stdio.h> #include <arpa/inet.h> // 包含inet_addr函数的头文件 int main() { const char *ip_str = "192.168.1.1"; unsigned long int ip_network_order = inet_addr(ip_str); if (ip_network_order != INADDR_NONE) { // 检查返回值是否有效 printf("IPv4 in network byte order: %lu\n", ip_network_order); } else { perror("inet_addr failed"); } return 0; } ``` 请注意,`inet_addr`函数在一些系统上可能会被标记为废弃,因为它不支持IPv6地址。在新标准中推荐使用`inet_pton`函数来替代。 使用`inet_pton`的示例代码如下: ```c #include <stdio.h> #include <arpa/inet.h> // 包含inet_pton函数的头文件 int main() { const char *ip_str = "192.168.1.1"; struct in_addr ip_addr; // 用于存储网络字节顺序的IPv4地址 int result; result = inet_pton(AF_INET, ip_str, &ip_addr); if (result == 1) { // 成功转换 printf("IPv4 in network byte order: %s\n", inet_ntoa(ip_addr)); } else { perror("inet_pton failed"); } return 0; } ``` 在这段代码中,`inet_pton`函数将IP地址字符串转换为网络字节顺序,并存储在`in_addr`结构体中。如果转换成功,`inet_ntoa`函数可以用来将网络字节顺序的地址转换回点分十进制的字符串形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值