当我尝试通过函数返回的指针显示数组的内容时,程序只显示零。我不确定缺少什么。我试过多次检查出了什么问题,但似乎没有任何线索。我正在使用Dev-C ++。守则如下。非常感谢您的帮助。
#include <iostream>
#include <math.h>
#include <cstdlib>
#include <cstring>
using namespace std;
bool vowel(char c)
{
int i, val;
char alphabet[52]={'a','A','b','B','c','C','d','D','e','E','f','F','g','G','h','H','i','I','j','J','k','K','l','L','m','M','n','N','o','O','p','P','q','Q','r','R','s','S','t','T','u','U','v','V','w','W','x','X','y','Y','z','Z'};
int const is_vowel[52]={1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0};
for (i=0;i<52;i++)
if (c!=alphabet[i])
{
val=is_vowel[i];
return val;
}
}
bool consonant(char c)
{
int i, val;
char alphabet[52]={'a','A','b','B','c','C','d','D','e','E','f','F','g','G','h','H','i','I','j','J','k','K','l','L','m','M','n','N','o','O','p','P','q','Q','r','R','s','S','t','T','u','U','v','V','w','W','x','X','y','Y','z','Z'};
int const is_coson[52]={1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0};
for (i=0;i<52;i++)
if (c==alphabet[i])
{
val=is_coson[i];
return val;
}
}
int* scan(char* sentence, int len_sent)
{
char c;
int count_cons=0, count_vow=0, count_dig=0, count_lc=0, count_uc=0, i,j;
int con_value, vow_value;
int* ptr;
int array_all_counts[5];
for (i=0; i<len_sent; i++)
{
c=sentence[i];
//check if the c is a digit
if (c>=48 && c<=57)
count_dig++;
else if (isalpha(c))
{
con_value=consonant(c);
vow_value=vowel(c);
if (con_value==0)
count_cons++;
else if (vow_value!=0) //vow_value==1
count_vow++;
if (96<c && c<123)
count_lc++;
if (64<c && c<91)
count_uc++;
}
}
cout<<"\n-------------------"<<endl;
array_all_counts[0]=count_uc;
array_all_counts[1]=count_lc;
array_all_counts[2]=count_dig;
array_all_counts[3]=count_vow;
array_all_counts[4]=count_cons;
ptr=array_all_counts;
cout<<"\n\n\nTesting the output of pointer: "<<endl;
for (i=0; i<5; i++)
cout<<ptr[i]<<" ";
return ptr;
}
int main()
{
int j, length;
char sentence[256];
int* ptr_array;
cout<<"Please, enter a sentence; ";
cin.getline(sentence,256);
length=strlen(sentence);
cout<<"the sentence: ";
cout<<sentence<<endl;
ptr_array=scan(sentence, length); //Address of first element returned into ptr_array
cout<<endl;
/// cout<<"Upper case: "<<" Lower case: "<<" Digits: "<<" Vowels: "<<" Consonants: "<<endl;
for (j=0; j<5; j++)
cout<<ptr_array[j]<<" "; //Where the problem is...
return 0;
}
答案 0 :(得分:1)
ptr=array_all_counts;
ptr
是本地int*
,它指向本地静态数组array_all_counts
,当从函数scan
退出时,本地数组将被销毁。因此,由于ptr
指向的内存被释放,因此您将无法在main中获得任何内容。
您可以在scan
功能中尝试以下功能:
int* ptr = new int [5]; //allocate memory on heap
array_all_counts[0]=count_uc;
array_all_counts[1]=count_lc;
array_all_counts[2]=count_dig;
array_all_counts[3]=count_vow;
array_all_counts[4]=count_cons;
//add this block
for (int i = 0; i < 5 ; ++i)
{
ptr[i] = array_all_counts[i];
}
如果输入为"abcdefghijk"
:
Testing the output of pointer:
0 11 0 3 8
0 11 0 3 8