将void函数转换为char* c

Transform a void function into char* C++

本文关键字:char 转换 void 函数      更新时间:2023-10-16

在我的另一个问题中,有人向我介绍了一个漂亮的代码。在这里是:

#include <iostream>
#include <cstring>
using namespace std;
void encode(char* source, char const* alpha)
{
    int i, j;
    int len = strlen(source);
    for (i = 0; i < len; i++)
    {
        if (source[i] >= 'a' && source[i] <= 'z')
        {
            j = source[i] - 'a';
            source[i] = alpha[j];
        }
    }
}
int main(void)
{
    char source[1001];
    char alpha[27];
    cin.getline(source, 1001);
    cin.getline(alpha, 27);
    encode(source, alpha);
    cout << source;
    return 0;
}

我该怎么做才能将此void函数转换为char*一个(应该成为char* encode(char* source, char const* alpha))?显然,因为它不会是"空白",所以它应该返回一个值,但是什么值?那些指针使我非常困惑。

#include <iostream>
#include <cstring>
using namespace std;
char* encode(char* source, char const* alpha)
{
    int i, j;
    int len = strlen(source);
    for (i = 0; i < len; i++)
    {
        if (source[i] >= 'a' && source[i] <= 'z')
        {
            j = source[i] - 'a';
            source[i] = alpha[j];
        }
    }
    return source;
}
int main()
{
    char source[1001];
    char alpha[27];
    cin.getline(source, 1001);
    cin.getline(alpha, 27);
    cout << encode(source, alpha);
    return 0;
}

做这样的事情。而且,如果您想更改主字符阵列,则您的空白功能将起作用。:)

char* encode(char* source, char const* alpha)
{
    int i, j;
    int len = strlen(source);
    for (i = 0; i < len; i++)
    {
        if (source[i] >= 'a' && source[i] <= 'z')
        {
            j = source[i] - 'a';
            source[i] = alpha[j];
        }
    }
    return source;
}

虽然看起来不像您对返回值做任何事情。

(您应该返回char数组的副本,还是在就位进行修改吗?)

返回char *确实只有在试图提醒调用函数的情况下发生错误才有意义:

char *encode(char *source, char const *alpha)
{
    int i, j;
    int len = strlen(source);
    /* Check For Argument Errors */
    if((source == NULL) || (alpha == NULL))
        return NULL;
    for (i = 0; i < len; i++)
    {
        if (source[i] >= 'a' && source[i] <= 'z')
        {
            j = source[i] - 'a';
            source[i] = alpha[j];
        }
    }
    return source;
}

通话功能可以检查这样的错误:

if(encode(source, alpha) == NULL)
{
    printf("Encoding error!n");
    return -1;
}
else
{
    cout << source;
}