C程序(求最长子串、预编译指令、用函数指针对日期排序、用va_list对字符串排序、时间函数、实心空心菱形)
来源:互联网 发布:虚拟歌姬绘画软件 编辑:程序博客网 时间:2024/06/04 19:59
1.求字符串个数最大的词
//求一个字符串中的重复最长的子字符串
#include <stdio.h>
#include <string.h>
int findchar(char **s)
{
int i1=0,i2=0;//i1是寻找时的起始坐标,i2是寻找时的一样字符的起始坐标。
int max=1;//最长的重复的子串的长度
char *mp1=NULL;
char *ps=*s;
int len=strlen(ps); //数组长度
char *mp2=NULL;//mp1 mp2分别是找到的最大子串的第一个和第二个的地址
int m=0,n=0;
int cnt=0;
for (i1=0;i1<len-1;i1++)
{
for (i2=i1+2;i2<len;i2++)
{
m=i1;n=i2;cnt=0;
while ( *(ps+m) == *(ps+n) )
{
m++;n++;cnt++;
}
if(cnt>max)
{
max=cnt;mp1=ps+i1;mp2=ps+i2;
}
}
}
if(max!=1) *s=mp1;
return max;
}
int main()
{
char *s="etyuriabcdfboop";
int i=findchar(&s);//i is lenght of the largest string
int j=0;
printf("length=%d\n",i);
if(i!=1)
{
for (j=0;j<i;j++)
printf("%c",*(s+j));
printf("\n");
}
else printf("字符串中没有相同重复的子串\n");
return 0;
}
2.预编译指令
//define 命令
#include <stdio.h>
#define pt(x) printf(#x"=%d\n",x);//#的作用是将#后面的作为字符串(也替换)处理
#define MAX(TYPE) TYPE max_ ## TYPE(TYPE x,TYPE y) {return x>y?x?y; }
#define ARM11
int main()
//argv[0]为执行的命令,后面依次为命令行中输入的字符串,argc为argv中的数据的个数。
{
int x=10;
int y=20;
pt(x)
pt(y)
#ifdef ARM9 //定义了哪个值,就会打印相应的值。
printf("ARM9\n");
#elif defined ARM11
printf("ARM11\n");
#elif defined INTEL
printf("INTEL\n");
#endif
return 0;
}
预编译指令(Unix下的,不知道在Windows下能不能用): #line 100 表示这个预编译下面的语句的行号指定为100.剩下程序的行号依次类推。在***.h中如果有: #if __INCLUDE_LEVEL__<10 #include <***.h> #endif 这段预编译代码是指如果自包含自己头文件嵌套数目>10,就停止编译。如果在xxx.c中有如下预编译代码: #pragma GCC dependency “yyy.h” 是指如果 yyy.h比此xxx.c还要新,程序出错。#pragma GCC poison return int hello//表示在程序中不能使用return int hello 等词,否则程序报错( _Pragma(“GCC xxx yyy”)表示不能用xxx yyy 两者同样功效 )。 #pragma pack(1) 表示结构体中对齐方式最小为 1. #warning 产生警告信息,但是程序仍能正常运行。 #error产生错误信息,程序不能正常执行。
3.用函数指针对日期排序
#include <stdio.h>
#include <string.h>
struct DATE;
#define SWAP(x,y) {DATE t;t=(x);(x)=(y);(y)=t;}
#define N 10 //the number of DATE array
typedef struct DATE
{
int year;int month;int day;
}DATE;
int fun1( void *px1,void *px2 )//year descending
{return ((DATE*)px2)->year-((DATE*)px1)->year;}
int fun2( void *px1,void *px2 )//month ascending
{return ((DATE*)px1)->month-((DATE*)px2)->month;}
int fun3( void *px1,void *px2 )//month ascending
{return ((DATE*)px1)->day-((DATE*)px2)->day;}
int fun4( void *px1,void *px2 )//按日期先后顺序排序
{
if ( ((DATE*)px1)->year > ((DATE*)px2)->year )
return 1;
else if ( ((DATE*)px1)->year < ((DATE*)px2)->year )
return 0;
else //year equal
{
if ( ((DATE*)px1)->month > ((DATE*)px2)->month )
return 1;
else if ( ((DATE*)px1)->month < ((DATE*)px2)->month )
return 0;
else //month equal
if( ((DATE*)px1)->day > ((DATE*)px2)->day )
return 1;
else if( ((DATE*)px1)->day < ((DATE*)px2)->day )
return 0;
}
return 0;
}
void pt(DATE *pdate,int n)
{
int i=0;
for (i=0;i<n;i++)
{printf("%d-%d-%d\n",(pdate+i)->year,(pdate+i)->month,(pdate+i)->day);}
}
void sort(void *pa,int n,int (*pfun)(void *px1,void *px2) )//排序通用算法
{
int i=0,j=0;
DATE* a=(DATE*)pa;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
if( pfun( (a+j),(a+j+1) )>0 ) SWAP(*(a+j),*(a+j+1));
}
}
int main()
{
DATE date[N];memset(date,N,sizeof(DATE));
int year,month,day,n=0, i=0;
printf("please input the num:\n");
scanf("%d",&n);
scanf("%*[^\n]");
scanf("%*c");
while(n--)
{
printf("please input the data(year-month-day)\n");
scanf("%d-%d-%d",&year,&month,&day);
//date[i++].year
date[i].year=year;date[i].month=month;date[i].day=day;
i++;
}
printf(".......................\n");
sort(date,i,fun1);pt(date,i);
printf(".......................\n");
sort(date,i,fun2);pt(date,i);
printf(".......................\n");
sort(date,i,fun3);pt(date,i);
printf(".......................\n");
sort(date,i,fun4);
pt(date,i);
return 0;
}
4.用va_list可变参数对字符串排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
char* sort(int cnt,...)//按升序排序
{
va_list vls;
va_start(vls,cnt);
char *maxs=va_arg(vls,char *);
char *t=NULL;
int i=0;
for (i=1;i<cnt;i++)
{
t=va_arg(vls,char *);
if ( strcmp(maxs,t)>0 )
maxs=t;
}
va_end(vls);
return maxs;
}
int main()
{
char s1[3][10];
char (*s)[10];
s=s1;
strcpy(*s,"bddk");
strcpy(*(s+1),"aabdkfk");
strcpy(*(s+2),"bcdefd");
printf("最大的字符串是:%s\n",sort(3,s,s+1,s+2) );
return 0;
}
5.时间函数
#include <time.h>
#include <stdio.h>
#include <string.h>
int main( )
{
char stime[100]={0};
time_t timesec;
time(×ec);//此句等同于timesec=time(NULL);
printf("从1970年至现在计算机经过的CPU秒数为:%ld\n",timesec);
struct tm *ltm=localtime(×ec);
printf("现在是 %d年-%d月-%d日\n",ltm->tm_year+1900,ltm->tm_mon+1,ltm->tm_mday);
printf("%d时-%d分-%d秒\n",ltm->tm_hour,ltm->tm_min,ltm->tm_sec);
printf("%s\n",asctime(ltm));//asctime将时间转化成默认的字符串格式。
int day=0;
printf("input the added days:\n");
scanf("%d",&day);
ltm->tm_mday+=day;//日期加day天
printf("%s\n",asctime(ltm));
int i;
for (i=0;i<10000000;i++);
clock_t ct=clock();//clock函数返回这个进程用的时间,除以CLOCKS_PER_SEC就是这个进程用的秒数。
int second=ct/CLOCKS_PER_SEC ;
printf("%d\n",ct);
printf("%d\n",second);
return 0;
}
6.实心空心菱形:
打印一个实心菱形:
#include <stdio.h>
#define ISABS(x) ( (x)>=0?(x):-(x) )
int main()
{
int size=2;
int i,j;
for(i=-size;i<=size;i++)
{
for(j=-size;j<=size;j++)
{
if( ISABS(i)+ISABS(j) <= size )
printf("*");
else
printf(" ");
}
printf("\n");
}
}
打印一个空心菱形:
#include <stdio.h>
#define ISABS(x) ( (x)>=0?(x):-(x) )
int main()
{
int size=2;
int i,j;
for(i=-size;i<=size;i++)
{
for(j=-size;j<=size;j++)
{
if( ISABS(i)+ISABS(j) == size )
printf("*");
else
printf(" ");
}
printf("\n");
}
}
- C程序(求最长子串、预编译指令、用函数指针对日期排序、用va_list对字符串排序、时间函数、实心空心菱形)
- [c语言]输入n,分别用*输出边长为n的实心菱形和空心菱形
- C语言 输入n,分别用*输出边长为n的实心菱形和空心菱形
- c 打印空心菱形和实心菱形
- 用php写水仙花,空心菱形,实心菱形,直角三角形
- C程序(约瑟夫问题、5子棋、发牌、整数转化成2进制,sizeof()问题),打印空心实心菱形
- C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表
- C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表 .
- 空心菱形与实心菱形
- JS中对日期时间的操作(函数)
- 输入n,分别用*输出边长为n的实心菱形和空心菱形。
- 打印空心和实心菱形
- java输出空心/实心菱形
- JAVA---用”*“打印实心菱形(自学)
- 用指针数组对字符串进行排序
- 浅谈输出实心菱形和空心菱形
- C# 输出一个 实心菱形&&空心菱形
- C# 打印实心菱形与空心菱形
- oracle--ODI基础概念
- MySQL性能优化的最佳21条经验
- jquery表格增加删除行操作
- 一键编译Boost批处理
- 双击表格td进行编辑
- C程序(求最长子串、预编译指令、用函数指针对日期排序、用va_list对字符串排序、时间函数、实心空心菱形)
- 大数相乘
- Run-Time Check Failure #0
- Crypto++简要入门
- 用Trie树实现词频统计和单词查询
- poj 2828 Buy Tickets
- java7新特性之一 7大新功能
- awk常用命令
- QSqlTableModel