C
Hallo nochmals!
Ich komme leider schon wieder nicht mehr weiter
error C2664: 'strftime': Konvertierung des Parameters 4 von 'std::string' in 'const tm *' nicht möglich
#include <iostream>
#include <string>
#include <time.h>
#include <algorithm>
using namespace std;
class SomeText {
public:
virtual string getText() = 0;
virtual ~SomeText();
};
SomeText::~SomeText()
{
}
//--------------------------------------------
// Fixer Text
class FixedText : public SomeText {
string txt;
public:
FixedText(string s);
virtual string getText();
};
FixedText::FixedText(string s)
: txt(s)
{
}
string FixedText::getText()
{
return txt;
}
//--------------------------------------------
// Dekorator - auf Länge l auffüllen/kürzen
class FilledText : public SomeText {
SomeText& st;
int len;
public:
FilledText(SomeText& t, int l);
virtual string getText();
};
FilledText::FilledText(SomeText& t, int l)
: st(t), len(l)
{
}
string FilledText::getText()
{
string s = st.getText();
int l = s.length();
if (l >= len)
return s.substr(0, len);
else
return s + string(len-l, ' ');
}
//--------------------------------------------
// Dekorator - um N Stellen verschoben
class ShiftedText : public SomeText {
SomeText& st;
unsigned int offset;
public:
ShiftedText(SomeText& t, unsigned int o);
virtual string getText();
void setOffset(unsigned int o);
};
ShiftedText::ShiftedText(SomeText& t,
unsigned int o)
: st(t), offset(o)
{
}
string ShiftedText::getText()
{
string s = st.getText();
unsigned int o = offset % s.length();
return s.substr(offset) + s.substr(0, o);
}
void ShiftedText::setOffset(unsigned int o)
{
offset = o;
}
//--------------------------------------------
// Text mit aktuellem Datum und Uhrzeit
class DateText : public SomeText {
public:
DateText();
virtual string getText();
};
DateText::DateText()
{
}
string DateText::getText()
{
time_t now = time(0);
string t = ctime(&now);
// \n am ende entfernen
return t.substr(0, t.length()-1);
}
//--------------------------------------------
// DekorText-Beginn
class DekorText:public SomeText
{
string links;
SomeText& mitte;
string rechts;
public:
DekorText(const char*, SomeText&, const char*);
virtual string getText();
};
DekorText::DekorText(const char* l, SomeText& m, const char* r)
:links(l), mitte(m), rechts(r)
{
}
string DekorText::getText()
{
return links + mitte.getText() + rechts;
}
//--------------------------------------------
class ReverseText:public SomeText
{
SomeText& text;
public:
ReverseText(SomeText&);
virtual string getText();
};
ReverseText::ReverseText(SomeText& s)
:text(s)
{
}
string ReverseText::getText()
{
string t = text.getText();
reverse(t.begin(), t.end());
return t;
}
//--------------------------------------------
// Text mit aktuellem Datum und Uhrzeit
class DateFormat : public SomeText {
public:
DateFormat();
virtual string getText();
};
DateFormat::DateFormat()
{
}
string DateFormat::getText()
{
char buffer[128];
time_t now = time(0);
string t = ctime(&now);
strftime(buffer,128,"Now is %I:%M%p.",*t);
return t.substr(0, t.length()-1);
}
//--------------------------------------------
void show(const char* what, SomeText& st,
char delimiter = '\n')
{
DekorText dt("[[" , st , "]]");
cout << what << ":" << dt.getText() << delimiter;
}
void show60(ShiftedText& st)
{
for(int i=0; i < 60; i++) {
st.setOffset(i);
_sleep(1000); // Windows: _sleep(1000);
show(" ", st, '\r');
cout.flush();
}
cout << "\n";
}
//--------------------------------------------
int main()
{
FixedText fix("Hello World");
show("fix", fix);
FilledText filled(fix, 60);
show("filled", filled);
ShiftedText shifted(filled, 10);
show("shifted 10", shifted);
ReverseText rt(shifted);
show("reverse", rt);
DateText dt;
DekorText ddt("#", dt, "#");
DateFormat df;
//time_t rawtime;
//struct tm * timeinfo;
//char buffer [80];
//time ( &rawtime );
//timeinfo = localtime ( &rawtime );
//strftime (buffer,80,"Now is %I:%M%p.",timeinfo);
//puts (buffer);
FilledText filleddate(ddt, 60);
ShiftedText shifteddate(filleddate, 0);
show60(shifteddate);
system("pause");
}
lg