C语言状态机(求单词的个数)
以空格为界限,求单词的个数
#define BEGIN 0
#define IN_WORD 1
#define OUT_WORD 2
int StrToWord(const char* str)
{
int sum = 0;
int tag = BEGIN;
for (const char* p = str; *p != '\0'; ++p)
{
switch (tag)
{
case BEGIN:
if (isalpha(*p))
{
tag = IN_WORD;
}
else
{
tag = OUT_WORD;
}
break;
case IN_WORD:
if(isalnum(*p)||*p=='\''||*p=='-'){}
if (!isalpha(*p))
{
sum++;
tag = OUT_WORD;
}
break;
case OUT_WORD:
if (isalpha(*p))
{
tag = IN_WORD;
}
break;
}
if (tag == IN_WORD)
{
sum++;
}
}
return sum;
}
int main()
{
char str[] = { "yhping 23 hello's new data print using" };
int num = StrToWord(str);
cout << num << endl;
return 0;
}
状态模式
例题:井底下有一只青蛙,一位小女孩和青蛙kiss之后,青蛙变为了王子,如果小女孩不情愿,则青蛙变为小狗
class Creature
{
class State
{
public:
virtual string response() = 0; // 纯虚函数 //
};
class Forg : public State
{
public:
virtual string response() { return "Ribbet ! "; }
};
class Prince : public State
{
public:
virtual string response() { return "Darling ! "; }
};
class Dog : public State
{
public:
virtual string response() { return "wang wang ! "; }
};
private:
State *pstate;
public:
Creature() :pstate(new Forg()) {}
~Creature() { delete pstate; }
void greet()
{
cout << pstate->response() << endl;
}
void kiss()
{
delete pstate;
srand(time(nullptr));
if (rand() % 2 == 0)
{
pstate = new Prince();
}
else
{
pstate = new Dog();
}
}
};
int main()
{
Creature ca;
ca.greet();
ca.kiss();
ca.greet();
return 0;
}
职责量模式
一个小女孩过生日,问爸爸要生日礼物,爸爸没给,然后继续问妈妈要,妈妈也没给,继续问爷爷要,爷爷也没给,直到问奶奶要,奶奶把生日礼物给她了
#include<iostream>
#include<ctype.h>
#include<vector>
using namespace std;
enum Answer { NO, YES };
class GimmeStrategy
{
public:
virtual Answer canIHave() = 0;
virtual ~GimmeStrategy() {}
};
class AskMom : public GimmeStrategy
{
public:
virtual Answer canIHave()
{
cout << " Mooom ? Can I have this ? " << endl;
return NO;
}
};
class AskDad : public GimmeStrategy
{
public:
virtual Answer canIHave()
{
cout << " Mad? Can I have this ? " << endl;
return NO;
}
};
class AskCrandpa : public GimmeStrategy
{
public:
virtual Answer canIHave()
{
cout << " Grandpa ? Can I have this ? " << endl;
return NO;
}
};
class AskGrandma : public GimmeStrategy
{
public:
virtual Answer canIHave()
{
cout << " Grandma ? Can I have this ? " << endl;
return YES;
}
};
class Gimme : public GimmeStrategy
{
private:
std::vector<GimmeStrategy*> chian;
public:
Gimme()
{
chian.push_back(new AskMom());
chian.push_back(new AskDad());
chian.push_back(new AskCrandpa());
chian.push_back(new AskGrandma());
}
Answer canIHave()
{
for (auto p : chian)
{
if (p->canIHave() == YES)
{
return YES;
}
cout << "whiiiiine !" << endl;
}
return NO;
}
};
int main()
{
Gimme chain;
chain.canIHave();
return 0;
}