提问人:JAISHREEDEVAKI T 提问时间:11/17/2023 最后编辑:JAISHREEDEVAKI T 更新时间:11/17/2023 访问量:42
我想找出一个字符串是否为另一个字符串的字谜。我的代码没有给出正确的输出。我不知道我的逻辑错误是什么
I want to find if one string to anagram of other string or not.My code is not giving a proper output.I don't know what is error in my logic
问:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[100];
char str2[100];
scanf("%s %s", str1, str2);
int a=strlen(str1);
int b=strlen(str2);
if(a!=b){printf("NO");return 0;}
for(int i=0;i<b;i++){
int k=0;
for(int j=0;j<a;j++){
if(str2[i]==str1[j]){k++;
str1[j]='0';}
}
if(k==0){printf("NO");return 0;}
}
printf("YES");
}
在上面的代码中,如果我没有使用该代码,则某些输入可以正常工作。我之所以使用这一行,是因为我想知道该字符串是否已被访问。我敢肯定错误出在这一行.但我不知道这个逻辑有什么错误。为什么我不应该使用这条线str1[j]='0';
答:
1赞
Nierusek
11/17/2023
#1
有几种方法可以检查一个字符串是否是另一个字符串的字谜。我可以举三个例子:
- 对两个字符串进行排序并检查它们是否相等
- 计算两个字符串中的字母,并检查每个字母的计数是否匹配(这是最简单,最快的方法)
- 对于第一个字符串中的每个字母,请尝试在第二个字符串中查找匹配的字母。我想这就是你想做的。
我修改了你的代码来做我认为你想做的事情:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
/* I do not recommend declaring arrays inside functions, but it's not
important right now */
char str1[100];
char str2[100];
scanf("%s %s", str1, str2);
/* Renamed a and b to more meaningful names. And strlen returns size_t, not int */
size_t str1_len = strlen(str1), str2_len = strlen(str2);
if (str1_len != str2_len) {
printf("NO");
return EXIT_FAILURE; /* Usually, when the program fails, it should not return 0 */
}
size_t k = 0;
for (size_t i = 0; i < str2_len; i++) {
for (size_t j = 0; j < str1_len; j++) {
if ((str2[i] != '\0') && (str2[i] == str1[j])) {
k++;
/* We mark both letters as matched by substituting them with NULL ('\0').
It will not work, if we have '\0' in our alphabet */
str1[j] = '\0';
str2[i] = '\0';
}
}
}
/* We check, if every letter was matched */
if (k != str1_len) {
printf("NO");
return EXIT_FAILURE;
}
printf("YES");
return EXIT_SUCCESS;
}
评论
0