任务是将每个大写字母更改为小写,反之亦然,并将每个数字增加1,并将9更改为0。
#include <iostream>
using namespace std;
void modif ( char*& arr){
for (int i=0;arr[i]!=0;i++)
if ('a'<=arr[i] && arr[i]<='z'){
arr[i]=char(((int)arr[i])-32);
}
else if ('A'<=arr[i] && arr[i]<='Z'){
arr[i]=char(((int)arr[i])+32);
}
else if ('0'<=arr[i] && arr[i]<='8'){
arr[i]=char(((int)arr[i])+1);
}
else if (arr[i]== '9'){
arr[i]=char(((int)arr[i])-8);
}
}
int main() {
char * s=new char [100];
cin.getline (s, 100);
void modif (char * s);
cout << s << endl;
delete [] s;
}
我可以让它在没有虚函数的情况下工作,但不能用它
答案 0 :(得分:0)
试试这个以便你实际调用函数:
int main() {
char * s=new char [100];
cin.getline (s, 100);
// void modif (char * s); // removed line
modif(s); // new line
cout << s << endl;
delete [] s;
}
答案 1 :(得分:0)
这一行:
void modif (char * s);
是一个函数声明,你想用它来调用它:
modif(s);
您的功能中也不需要char*&
,char*
就足够了。
答案 2 :(得分:0)
void modif (char * s);
是转发声明。在您的示例中没有必要,因为modif
被定义在其调用点之上。如果您想将modif
移到main
下面的文件中的某个位置,或者将其移到另一个文件中,则需要它:
#include <iostream>
using namespace std;
int main() {
char * s=new char [100];
cin.getline (s, 100);
void modif (char*&); // Forward declaration
modif(s); // Call
cout << s << endl;
delete [] s;
}
void modif ( char*& arr){
for (int i=0;arr[i]!=0;i++)
if ('a'<=arr[i] && arr[i]<='z'){
arr[i]=char(((int)arr[i])-32);
}
else if ('A'<=arr[i] && arr[i]<='Z'){
arr[i]=char(((int)arr[i])+32);
}
else if ('0'<=arr[i] && arr[i]<='8'){
arr[i]=char(((int)arr[i])+1);
}
else if (arr[i]== '9'){
arr[i]=char(((int)arr[i])-8);
}
}
前向声明是对编译器的一个承诺,即在其他地方将有一个函数定义。这样,如果您选择调用函数,编译器就会知道如何进行调用。请注意,声明和定义中的签名必须匹配。
另一方面,这个电话看起来像这样:
modif(s);
在这里,您告诉编译器您要调用函数modif
,并将s
的当前值传递给名为arr
的形式参数。