所以我有一个功课问题,要求我编写一个带有字符数组,字符数组和int指针的函数。该函数应循环遍历字符数组,忽略第二个参数char的任何实例,并创建一个新数组,该数组由原始数组中的字符组成,而不是第二个参数char的实例。然后需要将原始长度参数更改为新长度,并返回新数组。我对C ++很陌生,所以指针是一个我还没有完全掌握的新概念。
char *Problem5(char chars[], char letter, int *length){
int newLength=0;
int counter=0;
for(int i=0;i<*length;i++){
if(chars[i]!=letter){
newLength++;
}
}
char newChars[newLength];
for(int x=0;x<*length;x++){
if(chars[x]!=letter){
newChars[counter]=chars[x];
counter++;
}
}
*length=newLength;
return newChars;
}
有我的功能,我知道算法工作正常但不会编译。
char chars2[10] = {'g','g','c','g','a','g','g','g','t','g'};
printArray(chars2,10);
char *arrayPointer;
arrayPointer = Problem5(chars2,'g',length1);
printArray(arrayPointer,3);
这是我的主要功能部分,它被调用。我需要打印出结果数组,所以我尝试将它分配给一个指针,但是这一行:
arrayPointer = Problem5(chars2,'g',length1);
引发错误:从'char'到'char *'的转换无效我会非常感激一点点洞察力,因为我不知道我做错了什么。
答案 0 :(得分:0)
您的算法看起来不错,您的代码看起来非常好。我对这一行持怀疑态度:
char newChars[newLength];
因为您无法在编译时使用可变大小分配数组。您发布的代码可能不是您尝试编译的代码吗?
将上面的行更改为
char *newChars = new char[newLength];
并且数组将在运行时动态分配。我无法理解为什么你会得到“从'char'到'char *'的无效转换”错误编译
arrayPointer = Problem5(chars2,'g',length1);
根据您提供的定义。唯一具有类型“char *”的东西是问题5的第一个参数和返回值,并且那些看起来是您发布的正确类型。