传递一个字符串to function从中获取一个整数数组

时间:2014-12-23 12:45:04

标签: c arrays pointers

您好,这是我的代码,我对此非常困惑。 我正在将一个字符串传递给一个函数,我正在制作一个整数数组,我需要在main函数中使用它。我是一个新手,我想学习如何在这些类型的情况下取出数组。

#include <stdio.h>
#include <stdlib.h>

int *encrypt (char string[]);
char string[1000];
int intstring[10000], last;

int main()
{
gets(string);
encrypt(string[1000]);
for (int i = 0; i < strlen(string); i++){
    printf("%d ", intstring[i]);
}
}
int * encrypt(char string[])
{
for (int i = 0; i < strlen(string); i++)
{
    if (string[i] >= 65 && string[i] <= 90)
    {
        string[i] = string[i] - 65;

    }
    else if (string[i] >= 97 && string[i] <= 122)
    {
        string[i] -= 96;

    }
    else if (string[i] == 32)
    {
        string[i] -= 6;
    }
    else if (string[i] == 46)
    {
        string[i] -= 19;
    }
    intstring[i] = string[i];
 }
 return intstring;
 }

3 个答案:

答案 0 :(得分:2)

你在这里混淆了一些事情。 这样:

int intstring[10000]

是全局数组,所以不需要从函数中返回它,你可以直接在main中访问它。

此:

encrypt(string[1000]);

也错了,你必须这样称呼它:

encrypt(string);

如果需要,您也可以将长度作为单独的参数传递。

答案 1 :(得分:1)

所以,有几件事情没有特别的顺序:

首先,永远不要使用gets; 在您的代码中引入一个失败点。请改用fgets。截至2011年标准,它已从标准库中删除。不要使用它。

其次,如果你可以帮助它,你想避免使用全局变量。理想情况下,函数应该通过参数和返回值(以及支持它们的异常)进行通信。您可以更改函数,使stringintstring作为参数,如下所示:

void encrypt( char *string, int *intstring)
{
  // body of encrypt
}

请注意,由于您将intstring作为参数传递,因此您无需返回它,因此我键入了函数以返回void。来自main的电话看起来像是:

int main( void )
{
  char string[10000];
  int  intstring[10000];
  ...
  encrypt( string, intstring );
  ...
}

还要注意功能参数的类型;当您将数组表达式作为函数参数传递时,它会从类型“T”数组“衰减”到“指向T的指针”。当你传递数组参数时,你只需要指定名称; string[10000]指的是string数组末尾之后的下一个字符。

encrypt函数的正文中,您正在修改string的内容,只需将结果复制到intstring;你确定那是你想做的吗?您确定不想保留string的原始内容吗?

答案 2 :(得分:0)

将数组传递给函数时,不需要给出下标。所以把它改成这样。

encrypt(string);

之后您不需要返回全局数组。所以你可以使用函数作为void返回数据类型。

void encrypt (char string[]);