为什么把数组开到7之后样例一就过了呢?6为什么不行?

P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here

我感觉我字符串学的不是很好=。=
by Qt21 @ 2020-05-11 22:48:08


输入那里错了
by Cult_style @ 2020-05-11 22:55:56


@[Hello_world_ABC](/user/320485)
by Cult_style @ 2020-05-11 22:56:50


改成 ``` scanf("%s",star); scanf("%s",team); ``` ~~应该是这样~~
by Cult_style @ 2020-05-11 22:57:42


数组的输入和变量的输入不一样
by im696vme50 @ 2020-05-11 22:59:30


## C/C++是如何实现字符串的呢? 思路很简单,在内存中开辟一串空间表示字符串。 但是我们的字符串不一定需要开辟的空间那么大,怎么办呢?答案是找到这个字符串,在最后面加个数据0,表示字符串结束。 这个0不是字符,可以说是ASCII的源码为0,是实实在在的数据,写作'\0'(数据),而'0'(字符)这个字符在ASCII表中的源码为48。这样我们就把从首字母到数据0之前的这段标记成了字符串,所以字符串的空间往往比形式上的大1。 例如"BeiJing"表示字符串那么大概数据是{'B','e','i','J','i','n','g','\0'}。 C/C++规范上就是如此定下的,各种函数处理字符串也是看0终止,输入的时候字符串末尾标记一个0表示结尾,这个0不会被看做是字符串形式上的一部分,但是必不可少。 所以编程的时候字符串往往会多开5~10个空间,对于计算机来说5~10个空间是根本没有问题的。也不必那么节省空间,太节省空间就有点得不偿失,容易出BUG,太浪费时间了。 scanf函数调用的是指针,这个指针指向内存中的某个变量,对于数组它指向数组的第一个变量,比如a[0],a[1]就是第一个变量位置+1,a[n]即是+n,如果单单一个a的话就是一个指针变量,这个以后会学到。 字符串的记录形式也是这样,char s[100],则这个s指向第一个字符的位置s[0],scanf函数会从这个位置往后读入,如果字符串读完,会在末尾加一个0表示字符串的结束。 如果你给字符串的空间过小可能会各种BUG。 ```cpp char s[100];char c; scanf("%s %c",s,&c); //这种输入方式最好背下来,学到指针再理解吧 ``` @[Hello_world_ABC](/user/320485)
by Terrible @ 2020-05-11 23:21:00


谢谢各位,我明白了
by Qt21 @ 2020-05-12 06:22:42


|