gpt4 book ai didi

c++ - 在不使用字符串函数的情况下在 C++ 中复制字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:00 25 4
gpt4 key购买 nike

任何人都可以帮我解决这个代码..我只想复制显示在主函数中初始化的字符数组我对 cpp 很陌生,我想不出出路

#include<iostream>
using namespace std;

class base1
{
public:
void setname(char *name);
void setpubl(char *publisher);
void setauth(char *author);
char getname();
char getpubl();
char getauth();
private:
char init_name[50], init_publ[50], init_auth[50];

};

void base1::setname(char *name)
{
int i=0;
while(init_name[i] != '\0')
{
init_name[i]=name[i];
i++;
}
}

void base1::setpubl(char *publisher)
{
int j=0;
while(init_publ[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
}

void base1::setauth(char *author)
{
int k=0;
while(init_auth[k] != '\0')
{
init_auth[k]=author[k];
k++;
}

}

const char* base1::getname() const
{
return init_name;
}

const char* base1::getpubl() const
{
return init_publ;
}
const char* base1::getauth() const
{
return init_auth;
}
/*
base1::base1()
{
init_name[0]=0;
init_publ[0]=0;
init_auth[0]=0;
}*/

int main()
{
base1 hello;
char name[]="cpp";
char publisher[]="dreamworks";
char author[]="random";
hello.setname(name);
hello.setpubl(publisher);
hello.setauth(author);
cout<<hello.getname()<<endl;
cout<<hello.getpubl()<<endl;
cout<<hello.getauth()<<endl;
return 0;
}

当我尝试编译它时,它给了我很多错误。有人可以帮我吗。我正在使用 g++

错误:

copychar.cpp:49:13: error: prototype for ‘const char* base1::getname() const’ does not match any in class ‘base1’

copychar.cpp:10:6: error: candidate is: char base1::getname()

copychar.cpp:54:13: error: prototype for ‘const char* base1::getpubl() const’ does not match any in class ‘base1’

copychar.cpp:11:6: error: candidate is: char base1::getpubl()

copychar.cpp:58:13: error: prototype for ‘const char* base1::getauth() const’ does not match any in class ‘base1’

copychar.cpp:12:6: error: candidate is: char base1::getauth()

当我使用下面的代码时,只显示每个字符串的第一个字符

#include<iostream>
using namespace std;

class base1
{
public:
void setname(char *name);
void setpubl(char *publisher);
void setauth(char *author);
char getname();
char getpubl();
char getauth();
private:
char init_name[50], init_publ[50], init_auth[50];

};

void base1::setname(char *name)
{
int i=0;
while(name[i] != '\0')
{
init_name[i]=name[i];
i++;
}
}

void base1::setpubl(char *publisher)
{
int j=0;
while(publisher[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
}

void base1::setauth(char *author)
{
int k=0;
while(author[k] != '\0')
{
init_auth[k]=author[k];
k++;
}

}

char base1::getname()
{
return *init_name;
}

char base1::getpubl()
{
return *init_publ;
}
char base1::getauth()
{
return *init_auth;
}
/*
base1::base1()
{
init_name[0]=0;
init_publ[0]=0;
init_auth[0]=0;
}*/

int main()
{
base1 hello;
char name[]="cpp";
char publisher[]="dreamworks";
char author[]="random";
hello.setname(name);
hello.setpubl(publisher);
hello.setauth(author);
cout<<hello.getname()<<endl;
cout<<hello.getpubl()<<endl;
cout<<hello.getauth()<<endl;
return 0;
}

最佳答案

你的循环错了,不是

void base1::setpubl(char *publisher)
{
int j=0;
while(init_publ[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
}

但是

void base1::setpubl(char *publisher)
{
int j=0;
while(publisher[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
init_publ[j] = '\0'; // ensure destination string is null terminated
}

您的循环应该检查您传递给函数的 publisher 字符串的结尾,而不是 init_publ 字符串的结尾。这没有多大意义,因为您还没有给该字符串赋值。

其他循环也一样。

也看看这个

char getname();

还有这个

const char* base1::getname() const

看出区别了吗?首先你说 getname 是 char,然后你说它是 const char*const。你必须保持一致。第二个正确,替换

char getname();

const char* getname() const;

与 getauth 和 getpubl 相同。

关于c++ - 在不使用字符串函数的情况下在 C++ 中复制字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12963319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com