我的 Anagram 程序可以运行吗?如果是,为啥不编译?
Posted
技术标签:
【中文标题】我的 Anagram 程序可以运行吗?如果是,为啥不编译?【英文标题】:Can my Anagram Program Run? If yes, why is it not compiling?我的 Anagram 程序可以运行吗?如果是,为什么不编译? 【发布时间】:2016-08-11 18:40:55 【问题描述】:我的程序无法编译。它一直在说: [错误] 从 'char' 到 'char*' 的无效转换 它应该是一个程序,可以识别两个字符串是否是彼此的字谜。 我使用了一种排序方法,但我不知道它是否有效。 希望你们能帮帮我。 P.S 我只能使用字符串和数组。
int main ()
char sString_1[100], sString2[100], store[50];
int j, i;
printf("Enter String 1: ");
gets(sString_1);
printf("\nEnter String 2: ");
gets(sString2);
if (strlen(sString_1) != strlen(sString2))
printf("%s and %s are not anagrams", sString_1, sString2);
else
for(i = 0; i < strlen(sString_1); ++i)
for (j=i+1 ; j <= strlen(sString_1); ++j)
if (strcmp(sString_1[i], sString2[j]) > 0)
strcpy(store,sString_1[i]);
strcpy(sString_1[i],sString_1[j]);
strcpy(sString_1[j],store);
for(i = 0; i < strlen(sString2); i++)
for (j= i + 1; j <= strlen(sString2); j++)
if (strcmp(sString2[i], sString2[j]) >0)
strcpy(store,sString2[i]);
strcpy(sString2[i],sString2[j]);
strcpy(sString2[j],store);
if (strcmp(sString_1, sString2) == 0)
printf("ANAGRAM");
else
printf("NOT");
【问题讨论】:
在哪一行代码上?请全部删除并保留minimal reproducible example 整个程序是用 C 函数编写的。如果您正在使用 C++,请尝试使用内置的字符串类 - 根据我的经验,它们让生活更轻松。 看看strcpy(store,sString_1[i]);
。你用的是哪两个东西,strcpy
的参数类型是什么?
c++ 的东西在哪里?
【参考方案1】:
strcmp(sString_1[i], sString2[j])
strcmp 的参数应该是const char *
类型,但你传递单个字符。
【讨论】:
对于strcpy
也是如此。【参考方案2】:
一般来说,当您使用 p[i]
时,您会将指针(或数组)p
更改为它所指向的内容,例如一个角色。
这就像写*(p+i)
。要获取该字符的地址,您可以编写 p+i
或 &p[i]
。
示例:要修复您必须更改的错误
strcmp(sString_1[i], sString2[j])
进入
strcmp(&sString_1[i], &sString2[j])
【讨论】:
谢谢你。但现在我遇到了这些问题: if (strcmp(sString_1, sString2) == 0) printf("ANAGRAM");否则 printf("NOT"); 看看你的两个strcmp:第一个比较1和2,第二个比较2和2。 但我不明白你的字谜算法。我要做的是:对两个字符串进行排序。例如。 'dog' 变成了 'dgo','god' 也变成了 'dgo' 所以你可以在排序后对它们进行 strcmp。【参考方案3】:你想做这样的吗?
char sString_1[100], sString2[100], store; // store is 1char
//=======omit==========
else
for(i = 0; i < strlen(sString_1); ++i)
for (j=i+1 ; j < strlen(sString_1); ++j) // "<="→"<"
if (sString_1[i] > sString2[j]) // char
store = sString_1[i]; // char
sString_1[i] = sString_1[j];
sString_1[j] = store;
for(i = 0; i < strlen(sString2); i++)
for (j= i + 1; j < strlen(sString2); j++) // "<="→"<"
if (sString2[i] > sString2[j]) // char
store = sString2[i]; // char
sString2[i] = sString2[j];
sString2[j] = store;
//=======omit==========
1 个循环 4250 2450 0452 2 循环 0254 3 循环 0245
【讨论】:
以上是关于我的 Anagram 程序可以运行吗?如果是,为啥不编译?的主要内容,如果未能解决你的问题,请参考以下文章
将 32 位 C++ 代码移植到 64 位 - 值得吗?为啥?