在我的另一个问题中,有些人向我展示了一个漂亮的代码。这是:
#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)
)?显然,因为它不会是一个“无效”,它应该返回一个值但是有什么价值?那些指针让我非常困惑。
答案 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;
}