初学者字符串,构造函数
Posted
技术标签:
【中文标题】初学者字符串,构造函数【英文标题】:A beginner string, constructors 【发布时间】:2015-05-28 05:58:06 【问题描述】:我正在为我的课程编写代码,但我遇到了一个问题。我以前从未在 C++ 中处理过字符串,而且我不知道如何将一个字符串分成另外两个。程序也可以编译,但输出错误,我怀疑构造函数。有人可以看看并给我一个回答,我应该改变什么才能使代码正常工作吗?我将不胜感激:)
代码如下: main(老师给的)
int main()
oop::Data a;
oop::Data b;
MACRO1;//co tu ma się dziać?
Data b;
const oop::Data Data_element = "Test-first"; // tworzony jest obiekt const o nazwie Data_element klasy Data, do którego wpisywany jest teks
const oop::Data c(Data_element, "Test-second"); // wywołanie konstruktora
a.full_data("Pierwszy Drugi");
b.first() = b.second("Tekst testowy"); //co tu ma się dziać?
std::cout
<< "a = " << a << std::endl;
std::cout
<< "b = " << b.full_data() << std::endl;
std::cout
<< "c = " << c.first() << ", " << c.second() << std::endl;
const oop::Data d = a.to_upper(); //zamienia na WIELKIE litery
oop::Data e = d.to_lower(); //zamienia na mnałe litery
std::cout
<< "d = " << d << std::endl;
std::cout
<< "e = " << e << std::endl;
/* Output:
a = ["Pierwszy", "Drugi"]
b = ["Tekst testowy", "Tekst testowy"]
c = Test-first, Test-second
d = ["PIERWSZY", "DRUGI"]
e = ["pierwszy", "drugi"]
*/
.h 文件:
#define MACRO1 using namespace oop;
//Makro !
#include <string>
#include <iostream>
namespace oop
class Data
public:
Data(const char*);//Konstruktor ma przyjac const char* a nie string bo " text " to const char*
Data(const Data&,const char*);
Data();
Data(const Data&);//dla linijki 35
~Data();
void first_data(char* data);
std::string first() const;
const char* second()const;//to sie przyda
std::string second(std::string data) const;
//const char* full_data(const std::string data);
void full_data(const std::string data);
const char* full_data();
Data to_upper(void) const;//const dodajesz tutaj zawsze jak nie zmieniasz obiektu zeby metoda dzialala na const obiekcie
Data to_lower(void) const;
friend std::ostream & operator <<(std::ostream & wypisz, const Data& data);
private:
const char* _text1;
const char* _text2;
;
inline std::ostream & operator <<(std::ostream & wypisz, const Data& data)
return (wypisz<<"[\"" << data._text1 << " \", \" " << data._text2 << "\" ]");
#endif
.cpp 中的函数
#include <iostream>
#include "lab07.h"
#include <string>
//konstruktor*******************************************************************************************************
oop::Data::Data(const char* c)
_text1=c;
oop::Data::Data(const Data& object, const char* c)
_text1 = object._text1;
_text2 = c;
oop::Data::Data() //tu chyba nic nie jest potrzebne
oop::Data::Data(const Data& object)
_text1 = object._text1;
_text2 = object._text2;
oop::Data::~Data() //tu chyba nic nie jest potrzebne
//funkcje*******************************************************************************************************
void oop::Data::first_data(char* data)
std::string oop::Data::first()const
return std::string(" ");
std::string oop::Data::second(std::string data)const
return std::string(" ");
/* const char* oop::Data::full_data(const std::string data)
return " ";*/
void oop::Data::full_data(const std::string data)
int size = data.size();
int space = data.find(' ');
//_text1 = data.substr(0,space);
// _text2 = data.substr(space,size);
return ;
const char* oop::Data::full_data()
return " ";
oop::Data oop::Data::to_upper(void)const
return *this;
oop::Data oop::Data::to_lower(void)const
return *this;
const char* oop::Data::second()const
return " ";
【问题讨论】:
请把表扬改成英文好吗? 它给出了什么输出,你期望什么? @b4hand my psychic power predict: /* 输出:a = ["Pierwszy", "Drugi"] b = ["Tekst testowy", "Tekst testowy"] c = Test-first, Test -second d = ["PIERWSZY", "DRUGI"] e = ["pierwszy", "drugi"] */ 在您开始怀疑构造函数或拆分字符串之前,您应该担心您的 funkcje 完全没有实现。 (您真的对什么都不做或返回" "
会产生错误的结果感到惊讶吗?)在开始将字符串分成更多字符串之前,让其余的代码正常工作。另外,如果您被允许std::string
,请始终如一地这样做。
【参考方案1】:
有很多方法可以做到这一点。这里有两个:
快捷方式:串流
stringstream ss(data);
string tstr;
ss >> tstr; // every call to >> reads one bunch of characters up to the first whitespace.
然后制作一个大小合适的char数组,将tstr复制到char数组中,并将char数组赋值给_text1。重复 _text2。一个问题:像“the quick brown fox”这样的字符串会变成“the”,而剩下的字符串会丢失。
困难的方法:find and substr
string tstr;
size_t loc = data.find(' ');
if (loc != data.npos)
tstr = data.substr(0, loc);
//Copy tstr into _text1
tstr = data.substr(loc + 1, data.npos);
//Copy tstr into _text2
这个更适合“快速棕色狐狸”的案例。它会产生“the”和“quick brown fox”。
【讨论】:
以上是关于初学者字符串,构造函数的主要内容,如果未能解决你的问题,请参考以下文章