我正在为我的课程编写代码,而且我遇到了问题。我以前从未使用过C ++中的字符串,而且我也不知道如何将一个字符串分成另外两个字符串。该程序也编译,但输出错误,我怀疑构造函数。有人可以看看,并给我一个anaswer,我应该改变什么代码才能正常工作?我非常感激:)
这里是代码: 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 " ";}
答案 0 :(得分:0)
完成这一切的各种方法。这是两个:
快捷方式:stringstream
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。一个问题:像“快速的棕色狐狸”这样的字符串会变成“那个”,“快速”字符串的其余部分将丢失。
困难的方法:find和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”。
答案 1 :(得分:0)