C语言 如何将函数的结果返回到main,该函数应该用新字符串替换一个字符串

cqoc49vn  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(106)

我试图用C语言解决一个问题,我得到一个字符串,并将字符串的某些部分转换为数字。我创建了一个名为replace的函数。在函数中,我遍历字符串数组,寻找特定的元音,并返回一个数字。结果应该是新的字符串。然后我应该调用main中的函数来显示结果。我是一个c语言的biginner,除了使用数组和函数之外,我们还没有讨论过其他的解决方案。
但是我的代码返回null。有人能帮帮我吗?我现在已经导致猜测工作,不知道我需要做什么,并一直在它的几个小时.

#include <cs50.h>
#include <stdio.h>
#include <string.h>

string replace(string argv[]);

int main(int argc, string argv[])
{
    // argv[1] is the first word at the command line
    string s;
    string result = 0;
    if (argc != 2)
    {
        printf("Usage: %s word\n", argv[0]);
        return 1;
    }
    else
    {
        printf("Word is: %s\n", argv[1]);
        printf("%s\n", result);
        return 0;
    }
}

string replace(string argv[])
{
    string s = argv[1];
    int len = strlen(s);
    string result = 0;
    for (int i = 0; i < len; i++)
    {
        if (s[i] == 'a')
        {
            result += 6;
        }
        else if (s[i] == 'e' )
        {
            result += 3;
        }
        else if (s[i] == 'i')
        {
            result +=  0;
        }
        else if (s[i] == 'u')
        {
            result += 'u';
        }
        else
        {
            result += s[i];
        }
    }
    return result;
}

我已经尝试检查我的代码和各种选项来返回字符串。我试过使用边缘聊天GPT来找出我代码中的问题,但我不能解决这个问题和代码,现在我真的很困惑,甚至调用函数和使用命令行参数的逻辑。

kmbjn2e3

kmbjn2e31#

result += 3; result += 'u';等不会向字符串添加任何内容。它不是C++,Python或PHP。
string只是一个typedef隐藏的char指针。
要创建一个新的字符串,你需要分配足够的内存来容纳所有的字符和空字符结束符。
很难理解result += 3要做什么-我假设你想把它和"3"连接起来。

string replace(string argv[])
{
    string s = argv[1];
    size_t len = strlen(s);
    string result = malloc(len + 1);
    if(result)
    {
        for (int i = 0; i < len; i++)
        {
            if (s[i] == 'a')
            {
                result[i] = '6';
            }
            else if (s[i] == 'e' )
            {
                result[i] = '3';
            }
            else if (s[i] == 'i')
            {
                result[i] = '0';
            }
            else if (s[i] == 'u')
            {
                result[i] = 'u'; // for what reason?? (same as OP code)
            }
            else
            {
                result[i] = s[i];
            }
        }
        result[len] = 0;
    }

    return result;
}

但你永远不会调用这个函数。你需要:

int main(int argc, string argv[])
{
    // argv[1] is the first word at the command line
    string s;
    string result;
    if (argc != 2)
    {
        printf("Usage: %s word\n", argv[0]);
        return 1;
    }
    else
    {
        printf("Word is: %s\n", argv[1]);
        result = replace(argv);
        if(result) printf("%s\n", result);
        else {/* handle allocation error*/}
        free(result);
        return 0;
    }
}

相关问题