设置指向函数返回值的指针

时间:2018-02-05 04:27:54

标签: c++ pointers

我正在尝试将变量 char * vowels char *辅音分别设置为函数searchVowels和searchConsonants的返回值。

虽然当我测试代码时,上面的变量设置得当但没有被传回主体。在使用

进行测试期间
cout << "text vowels" << vowels << "sametext" << consonants; ///something like this.

它现在不显示辅音值。

这是我的代码,任何建议都会非常有用。除了我不能使用字符串。(对于一个类)

这也是发布代码的合适方式吗?

 #include <iostream>                                                             
 #include <cctype>                                                               
 #include <cstring>                                                                   
 using namespace std;                                                                                                                                         
 const int SIZE = 7;                                                             


 //This function greets the user.                                                
 void greetUser();                                                               

 //This funcion asks for the array of letters.                                   
 char * inputLetters(char * inputArray);                                         

 //This will capitalize all letters to make them easier for the computer         
 //to compare.                                                                   
 char * capitalizeLetters(char * inputArray);                                    

 //This function will search the array for vowesl. If no vowels no game.         
 char * searchVowels(char * arrayCopy);                                          

 ///This function will search the array for consonants.                          
 char * searchConsonants(char * arrayCopy);                                      


 //This capitalizes all the letters in the initial array.                        
 char * capitalizeLetters(char * inputArray)                                     
 {                                                                               
    for (int i = 0; i < 6; ++i)                   
                    {                                                                       
            inputArray[i] = toupper(inputArray[i]);                         
    }                                                                       
 //      inputArray = toupper(inputArray);                                       
    return inputArray;                                                      
 }                                                                               


 //This program will search the array for consonants                             
    //and return the consonants array.                                      
 char * searchConsonants(char * arrayCopy)                                       
 {                                                                               

    char * consonants; consonants = new char[SIZE];                         

    for (int i = 0; i < 6; ++i)                                             
    {//I feel like I could make this into a function itself...hmm           
            if( arrayCopy[i] != 'A' && arrayCopy[i] != 'E'                  
            && arrayCopy[i] != 'I' && arrayCopy[i] != 'O' &&                
            arrayCopy[i] != 'U' && arrayCopy[i] != 'Y')                     
            {                                                               
            consonants[i] = arrayCopy[i];                                   
            }                                                               
    }                                                                       

 return consonants;                                                              

 }    

3 个答案:

答案 0 :(得分:1)

在方法searchVowels中,您似乎有以下代码:

        if( arrayCopy[i] == 'A' && arrayCopy[i] == 'E'                  
        && arrayCopy[i] == 'I' && arrayCopy[i] == 'O' &&                
        arrayCopy[i] == 'U' && arrayCopy[i] == 'Y')                     
        {                                                               
                arrVowels[i] = arrayCopy[i];                            
        }

你期望arrayCopy[i]如何通过支票,因为它不能同时拥有所有元音。我想你在这里寻找OR支票。

        if( arrayCopy[i] == 'A' || arrayCopy[i] == 'E'                  
        || arrayCopy[i] == 'I' || arrayCopy[i] == 'O' ||
        arrayCopy[i] == 'U' || arrayCopy[i] == 'Y')                     
        {                                                               
                arrVowels[i] = arrayCopy[i];                            
        }

在上述情况下,如果检查通过,它可能会填充arrayVowels

此外,您可以将上述代码转换为类似HasVowels()的函数,该函数检查arrayCopy是否在第i个索引处有元音,然后在searchVowels中使用它和searchConsonants

还有一件事是在代码中使用“免费”。 在C ++中,delete运算符只能用于指向使用new operator分配的内存的指针,而free()只能用于指向使用{malloc()分配的内存的指针。 1}}或用于NULL指针。

答案 1 :(得分:0)

new运算符应与delete运算符一起使用(而不是free)。

您不应删除或释放您从a返回的内存 函数,如果返回值打算由调用者使用。

在下面的这个例子中,函数的调用者(不是 函数本身)分配函数的内存和调用者 在不再需要时释放内存。

searchVowels函数不一定知道何时 来电者不再需要记忆。

在下面的示例中,searchVowels函数未分配 内存并假定dest参数数组的内存 并且已经分配了输入字符串。

/* IMPORTANT: This code assumes that SIZE is already defined */

void searchVowels(char* dest, char * inputString) {                                          
    int destIndex;
    int i;

    /* Update this function with other functionality */
    /* as intended */

    destIndex = 0;
    dest[destIndex] = '\0';

    for(int i = 0; i < strlen(inputString); i++)                                              
    {                                                                       
        if ((inputString[i] == 'A') || (inputString[i] == 'E')) {
        {   
            if (destIndex < SIZE) {
                dest[destIndex] = inputString[i];
                dest[destIndex+1] = '\0';
                destIndex = destIndex + 1;
            }                                                            
        }                                                               
    }                                                                       
}  

/* From the code that calls searchVowels */

char* result;

try {
    char* result = new char[SIZE];

    searchVowels(result, "TESTAEIOU");

    /* Use the result variable Here */

    delete result;

} catch (std::bad_alloc&) {
  /* new did not allocate memory */
}

答案 2 :(得分:0)

我解决了这个问题,它正在返回,但没有设置数据应该如何。我需要使用||用于元音的管道并设置另一个用于循环以检查所有条件。它与释放内存无关。 这是函数的代码。

     char * searchConsonants(char * arrayCopy)                                       
{                                                                               

    char * consonants; consonants = new char[SIZE];                         

    for (int i = 0; i < 6; ++i)                                             
    {//I feel like I could make this into a function itself...hmm           
            for(int j = 0; j < 6; ++j)                                      
            {                                                               
                    if( arrayCopy[j] != 'A' && arrayCopy[j] != 'E'          
                    && arrayCopy[j] != 'I' && arrayCopy[j] != 'O' &&        
                    arrayCopy[j] != 'U' && arrayCopy[j] != 'Y')             
                    {                                                       
                    consonants[i] = arrayCopy[j];                           
                    ++i;                                                    
                    }                                                       
            }                                                               
    }                                                                       

return consonants;                                                              
}