我的 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&amp;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 程序可以运行吗?如果是,为啥不编译?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的电脑只能运行一个程序

我的 Ruby Anagram 无法正常工作

将 32 位 C++ 代码移植到 64 位 - 值得吗?为啥?

有人可以解释为啥我的最后一个 else 语句不会运行吗?

为啥我的 Apps 脚本删除循环运行如此缓慢?我可以提高性能吗?

为啥我的 import.sql 文件没有自动运行?