Python转C选手常见问题与注意事项

发布时间 2023-12-03 13:46:57作者: 奇思妙想张霁羊

1 强制变量转换的不同含义

Python的int(s)转换的是对应的数字,而C语言转换的是对应的ASCII编码,如:

Python的强制变量转换

s='0'
a=int(s)
print(a) #输出结果为0
s='a'
a=int(s)
print(a) #程序报错

C的强制变量转换

s='0'
a=int(s)
printf("%d",a) //输出结果为48
s='a'
a=int(s)
printf("%d",a) //输出结果为96

Python使用int(s)可以实现字符串到数字的自动转换,但C语言的int(s)只能转换一个字符。

倘若要把字符串‘1234’转换成数字,Python可以这么写:

s="1234"
a=int(s)

C需要这么写

char s[10]="1234";
int a=0;
for (int i=0;i<strlen(s);i++) a=a*10+int(s[i])-48;

人类很容易理解“1234”是一千二百三十四的意思,但机器并不懂,他只知道字符串s里面包含了四个字符'1','2','3','4',对应的ASCII编码分别是49,50,51,52。所以我们需要把机器理解的编码一位一位的转换成我们想要的数字。Python是为了方便产生的简写,他的int(s)底层逻辑依旧是按位转换的,只不过他对这些命令进行了封装,以方便我们程序员调用。

我们需要记住三个ASCII编码('0'--48,'A'--65,'a'--97)。当然如果记不住,直接用'0'替代48也是可以的。编译器会实现自动转换

2 程序层级问题

Python里是严格根据缩进划分层级的,如

print('when you enter APA, you can...')
for i in range(10):
    for j in range(8):
        print('eat')
        print('drink')
    	print('play')
    print('study programming')
print('end')

缩进四格的就是在一层循环内,缩进八格的就是在两层循环内,没有缩进就是在循环外。

C则是使用大括号来区分层级,对缩进没有严格要求

printf("when you enter APA, you can...");
for (int i=0;i<10;i++){
    for (int j=0;j<8;j++){
        printf("eat");
        printf("drink");
    	printf("play");
    }
    printf("study programming");
}
printf("end");

一层大括号里是一层循环内,两层大括号里是两层循环内,大括号外是循环外。

当然也有的时候你会看不到大括号,比如:

printf("when you enter APA, you can...");
for (int i=0;i<10;i++)
    if (i<5) printf("eat");
printf("drink");

如果for循环(或if语句)里只有一条命令,这时大括号可加可不加。如果没有大括号,则默认for循环(或if语句)后面的第一条命令隶属于该循环,第二条开外都在循环以外。

怎么区分一条命令呢?一个分号就是一条命令,命令与命令用分号分割开来。

3 字符串的输入与输出

(1)输入一个字符串,字符串内保证没有空格(可以理解成一个单词)

scanf("%s",&s); //c语言
cin>>s; //C++

(2)输入N,随后输入N个字符串,字符串内保证没有空格(可以理解成N个单词)

scanf("%d",&n);
for (int i=0;i<n;i++)
    scanf("%s",&s[i]); //c语言

cin>>n; 
for (int i=0;i<n;i++)
    cin>>s[i]//C++

(3)输入一行字符串,字符串内可能包含空格(可以理解成一个句子,不知道几个单词)

gets(s);//C语言,不推荐比赛使用
cin.getline(s); //C++,推荐比赛使用!

(4)输入N,随后输入N个字符串,字符串内可能包含空格(可以理解成N个句子)

scanf("%d",&n);
getchar();//一定要加getchar(),否则当我们输入N后按下回车,机器会把回车符默认成第一句空话
for (int i=0;i<n;i++)
    gets(s[i]); //c语言

cin>>n; 
getchar();//一定要加getchar(),否则当我们输入N后按下回车,机器会把回车符默认成第一句空话
for (int i=0;i<n;i++)
    cin.getline(s); //C++

(5)输入单一字符

char c=getchar();

字符数组与字符串的基本函数:

image-20231201112412943 image-20231201112412943

4 其他小不同

(1)单引号双引号

C语言里单引号('')代表字符型(char s='a'),双引号("")代表字符串(char s[10];s="abcde")

Python单双引号完全等同,可互用

(2)欢迎补充...