C++编写四道程序题!
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/07 22:37:49
C++编写四道程序题!
1、输入一个年月日,输出该年月日是这年里的第几天.2、输入一个字符串,在该字符串的某个位置插入一个子串,输出插入的位置以及插入子串后的字符串.3、输入一个字符串,在该字符串的某个位置删除一个子串,输出删除的位置以及删除后的字符串.4、输入一个字符串,在该字符串中查找一个子串,输出该子串的位置.我写了好像不太可以,QAQ
1、输入一个年月日,输出该年月日是这年里的第几天.2、输入一个字符串,在该字符串的某个位置插入一个子串,输出插入的位置以及插入子串后的字符串.3、输入一个字符串,在该字符串的某个位置删除一个子串,输出删除的位置以及删除后的字符串.4、输入一个字符串,在该字符串中查找一个子串,输出该子串的位置.我写了好像不太可以,QAQ
1、
#include <iostream>
#include <windows.h>
using namespace std;
/* 以公元阳历来计算(非农历) */
int _MONTH[]={{31},{28},{31},{30},{31},{30},{31},{31},{30},{31},{30},{31}};
int days(const int *m,const int *day)
{
int i,md=0;
unsigned int d;
\x05
for(i=0;i<(*m-1)&&(i<11);i++)
md=md+_MONTH[i];
d=md+(*day);
return (int)((d+365)-365);
}
void display(const int y,const int m,const int d)
{
cout<<y<<"年"<<m<<"月"<<d<<"日"<<"是今年的第"<<days(&m,&d)<<"天"<<endl;
}
int main()
{
\x05int month,day,year;
RESET:
\x05month=day=1;
\x05cout<<"年份:";
\x05cin>>year;
\x05cout<<"月份:";
\x05cin>>month;
\x05cout<<"日期:";
\x05cin>>day;
\x05
\x05while((month<1||month>12)||(day<1||day>31))
\x05{
\x05\x05cout<<"月份或日期有误,请重新输入!"<<endl;
\x05\x05fflush(stdin);
\x05\x05Sleep(3000);
\x05\x05goto RESET;
\x05}
\x05display(year,month,day);
return 0;
}
2、
#include <iostream>
using namespace std;
#define MAX_LONG_S 100
static char HandleString[MAX_LONG_S];
void Reset()
{
\x05for(int i=0;i<MAX_LONG_S;i++) HandleString[i]='\0';
}
/*
函数功能: 在目标字符串中把新的子串插入指定的位置
函数结果: 返回插入后的新字符串
*/
char *InsertSubString(const char *TargetString,const char *NewString, int Start)
{
int i,r,newLen,moveE,v,Back;
i=r=newLen=moveE=v=Back=0;
moveE=strlen(NewString);
Reset(); /* 重置全局静态数组 */
while (*TargetString)
{
\x05 HandleString[i]=*TargetString++;/* 把目标字符串交给全局数组 */
\x05 i++;
\x05 r++;
}
\x05for(v=--i;v>=Start;v--)
\x05{
HandleString[v+moveE]=HandleString[v];
\x05}
\x05while(*NewString)
\x05{
HandleString[Start++]=*NewString++;
\x05}
return HandleString; /* 返回处理过的新串*/
}
int main()
{
char ts[MAX_LONG_S],ss[10]="123";
cout<<"请输入字符串:";
cin>>ts;
cout<<endl<<"插入子串前:"<<ts<<endl;
InsertSubString(ts,ss,1);
cout<<"插入子串后:"<<HandleString<<endl;
return 0;
}
说明:后面几个要求跟第2个例子的实现原理一样.你可以自己尝试改装下.
#include <iostream>
#include <windows.h>
using namespace std;
/* 以公元阳历来计算(非农历) */
int _MONTH[]={{31},{28},{31},{30},{31},{30},{31},{31},{30},{31},{30},{31}};
int days(const int *m,const int *day)
{
int i,md=0;
unsigned int d;
\x05
for(i=0;i<(*m-1)&&(i<11);i++)
md=md+_MONTH[i];
d=md+(*day);
return (int)((d+365)-365);
}
void display(const int y,const int m,const int d)
{
cout<<y<<"年"<<m<<"月"<<d<<"日"<<"是今年的第"<<days(&m,&d)<<"天"<<endl;
}
int main()
{
\x05int month,day,year;
RESET:
\x05month=day=1;
\x05cout<<"年份:";
\x05cin>>year;
\x05cout<<"月份:";
\x05cin>>month;
\x05cout<<"日期:";
\x05cin>>day;
\x05
\x05while((month<1||month>12)||(day<1||day>31))
\x05{
\x05\x05cout<<"月份或日期有误,请重新输入!"<<endl;
\x05\x05fflush(stdin);
\x05\x05Sleep(3000);
\x05\x05goto RESET;
\x05}
\x05display(year,month,day);
return 0;
}
2、
#include <iostream>
using namespace std;
#define MAX_LONG_S 100
static char HandleString[MAX_LONG_S];
void Reset()
{
\x05for(int i=0;i<MAX_LONG_S;i++) HandleString[i]='\0';
}
/*
函数功能: 在目标字符串中把新的子串插入指定的位置
函数结果: 返回插入后的新字符串
*/
char *InsertSubString(const char *TargetString,const char *NewString, int Start)
{
int i,r,newLen,moveE,v,Back;
i=r=newLen=moveE=v=Back=0;
moveE=strlen(NewString);
Reset(); /* 重置全局静态数组 */
while (*TargetString)
{
\x05 HandleString[i]=*TargetString++;/* 把目标字符串交给全局数组 */
\x05 i++;
\x05 r++;
}
\x05for(v=--i;v>=Start;v--)
\x05{
HandleString[v+moveE]=HandleString[v];
\x05}
\x05while(*NewString)
\x05{
HandleString[Start++]=*NewString++;
\x05}
return HandleString; /* 返回处理过的新串*/
}
int main()
{
char ts[MAX_LONG_S],ss[10]="123";
cout<<"请输入字符串:";
cin>>ts;
cout<<endl<<"插入子串前:"<<ts<<endl;
InsertSubString(ts,ss,1);
cout<<"插入子串后:"<<HandleString<<endl;
return 0;
}
说明:后面几个要求跟第2个例子的实现原理一样.你可以自己尝试改装下.