c++ - 无法从函数 c++ 返回数组
问题描述
#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm>
using namespace std;
void getinput (string &first,string &second);
void lengthcheck (string first, string second);
//int anagramcheck (string word);
int* lettercounter (string input);
int main()
{
std::string a;
std::string b;
getinput(a,b);
lengthcheck (a,b);
lettercounter(a);
lettercounter(b);
int* one = lettercounter(a);
int* two = lettercounter(b);
if (one == two)
cout << "You Have Entered An Anagram" << endl;
else
cout << "You Have Not Entered An Anagram" << endl;
}
void getinput (string &first, string &second) {
cout << "Enter First Input: ";
getline(cin, first, '\n');
cout << "Enter Second Input: ";
getline(cin, second, '\n');
cout << "You Entered " << first << " and " << second <<endl;
}
void lengthcheck(string first, string second){
int lengtha = first.length();
int lengthb = second.length();
if ((lengthb > 60) || (lengtha > 60)) {
cout << "Input Is Invalid" << endl;
} else if (lengtha !=lengthb) {
cout << "Input is not an anagram" << endl;
} else {
cout << "Input is Valid" << endl;
}
}
int* lettercounter(string input)
{
static int freq[26] = {0};
int length = input.length();
for (int i=0; i<26; i++) {
freq[i]=0;
}
for (int i=0; i <length; i++) {
if(input[i]>='a' && input[i]<='z')
{
freq[input[i] - 97]++;
}
else if(input[i]>='A' && input[i]<='Z')
{
freq[input[i] - 65]++;
}
}
for(int i=0; i<26; i++) {
/* If current character exists in given string */
if(freq[i] != 0)
{
printf("'%c' = %d\n", (i + 97), freq[i]);
}
return freq;
}
}
我无法返回freq
从名为 .的用户定义函数命名的数组lettercount
。有人可以给我一个提示吗?我需要lettercount
返回一个数组。我需要调用函数 lettercount 两次,以便比较每个数组的结果以确定两个输入是否是字谜。我不确定该函数是否将实际值返回给 main。
解决方案
首先,freq
不应该是静态的。通过将其设为静态,您将每次都访问同一个数组。对于您想做的事情,您不想总是访问相同的内存。
其次,您不能只返回一个指向尚未动态分配或不是静态的内存的指针。当您超出范围时(即您从函数lettercounter
返回到main
),数组占用的内存将被释放。因此,您将返回一个指向不再保留的内存的指针,从而导致未定义的行为。
如果您确实需要使用原始指针,那么每次输入lettercounter
时,您都需要像这样动态地为数组分配内存int * freq = new int[26];
:这将为大小为 26 的数组保留内存。然后,当您返回 freq 时,内存仍将被分配。但是,不要忘记分配的内存new
不会自行删除。你必须清理你的烂摊子。在这种情况下,最后main
你会调用delete[] one;
and delete[] two;
。
int* lettercounter(string input)
{
int * freq = new int[26];
.
.
.
return freq;
}
int main()
{
.
.
int* one = lettercounter(a);
int* two = lettercounter(b);
.
.
delete[] one;
delete[] two;
}
推荐阅读
- r - 带有条件的 RShiny 中的 renderText If Else
- java - 为什么在 Embedded Jetty 中使用 server.join()
- c# - 旋转后,每当我向左或向右移动时,它都会向相反的方向移动
- c# - 根据光线投射命中创建对游戏对象的引用
- sql - 逐行获取表的数据
- php - 如何在 PHP 中不直接使用 $_FILES Superglobal?
- mysql - 从日期时间输入中选择数据为 2019 年 8 月并按其分组
- python - 我使用 discord.py 制作了一个 Welcomer 机器人。启动成功,但不向频道发送指定消息
- python - python,字符串到十六进制数组
- postgresql - AttributeError:“命名空间”对象没有属性“项目”