我正在尝试将变量 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;
}
答案 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;
}