将void函数转换为char * C ++

时间:2014-01-26 02:39:48

标签: c++ function pointers char void

在我的另一个问题中,有些人向我展示了一个漂亮的代码。这是:

#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))?显然,因为它不会是一个“无效”,它应该返回一个值但是有什么价值?那些指针让我非常困惑。

3 个答案:

答案 0 :(得分:6)

#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;
}

做那样的事。如果你想更改main的char数组,你的void函数就可以了。 :)

答案 1 :(得分:2)

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数组的副本,还是就地修改它好吗?)

答案 2 :(得分:1)

如果你试图提醒调用函数发生错误,那么返回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;
}