簡體   English   中英

將void函數轉換為char * C ++

[英]Transform a void function into char* C++

在另一個問題中,有人向我提供了漂亮的代碼。 這里是:

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

做這樣的事情。 而且,如果您要更改main的char數組,則可以使用void函數。 :)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM