超简单题目没过,哪里有问题?
本帖最后由 yinda_peng 于 2023-11-21 17:34 编辑#include <stdio.h>
#include <stdlib.h>
int main()
{
char str = {0};
char str1,str2;
scanf("%s",str1);
scanf("%s",str2);
int i=0;
while (str1 != '\0'){
str[(int)(str1)]++;
i++;
}
i = 0;
while (str2 != '\0'){
if ((str[(int)(str2)]--) < 0){
printf("NO");exit(0);
}
i++;
}
printf("YES");
return 0;
}
艹,问题出在<=0,自己排查出来了…… while (str2 != '\0'){
if ((str[(int)(str2)]--) <= 0){ //<=0
printf("NO");exit(0);
}
i++;
}
这段代码的问题在于字符计数的部分。在这个循环中,使用了 str[(int)(str1[ i])]++ 来对字符进行计数。然而,这种方法在处理字符时存在一些问题。具体来说,这段代码假设字符的ASCII码是连续的,但实际上并非如此。因此,这种方法不能正确地对字符进行计数。
要解决这个问题,可以使用一个大小为256的整型数组来代替 str 数组,其中每个索引对应一个字符的ASCII码。然后,可以遍历输入的字符串,对应的数组元素加一。这样就可以正确地对字符进行计数了。
修正后的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1, str2;
int count = {0}; // 初始化为0
scanf("%s", str1);
scanf("%s", str2);
for (int i = 0; str1[ i] != '\0'; i++) {
count[(int)str1[ i]]++;
}
for (int i = 0; str2[ i] != '\0'; i++) {
if (count[(int)str2[ i]]-- <= 0) {
printf("NO");
return 0;
}
}
printf("YES");
return 0;
}
这样修改后的代码将能够正确地对输入的字符串进行字符计数,并输出正确的结果。 #include <stdio.h>
#include <stdlib.h>
int main()
{
char str = {0};
char str1,str2;
scanf("%s",str1);
scanf("%s",str2);
int i=0;
while (str1 != '\0'){
str[(int)(str1)]++;
i++;
}
i = 0;
while (str2 != '\0'){
if ((str[(int)(str2)]--) <= 0){
printf("NO");exit(0);
}
i++;
}
printf("YES");
return 0;
} 兄弟,你这是什么IDE啊? 风眠 发表于 2023-11-21 18:43
兄弟,你这是什么IDE啊?
蓝桥题库的 yinda_peng 发表于 2023-11-22 13:15
蓝桥题库的
好的,谢谢
页:
[1]