c语言时间比对

本文主要指的是对时间的比对。
/********************************
测试如何比对时间
*********************************/
#include <stdio.h>
int main()
{
	char *pOldTime = "2012/12/13";
    char *pNewTime = "2012/01/01";
    if(*pOldTime < *pNewTime)
    {
		printf("时间比对正确!");
    }
    else if(*pOldTime > *pNewTime)
    {
		printf("时间比对错误!");
    }
    else
    {
		printf("没有输出");
    }
	sleep(5000);
	return 0;
}

int main2()
{
	char *pOldTime = "2012/12/13";
    char *pNewTime = "2013/01/01";
    int i=0;
    i = strcmp(pOldTime,pNewTime);
    printf("i=%d\n",i);
	sleep(5000);
	return 0;
}
int main0()
{  
    char* pStrOldTime  = "2011-02-05";   
    char* pStrNewTime = "2011-07-05";   
      
    while(*pStrOldTime)  
    {  
        if(*pStrOldTime != *pStrNewTime)  
        {  
            if(*pStrOldTime > *pStrNewTime)  
                printf(">>>>\n");  
                //return ">";  
            else  
                printf("<<<<\n");  
                //return "<";  
            break;    
        }  
        pStrOldTime++;  
        pStrNewTime++;  
    }  
  
    sleep(5000);
	return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题描述: 给定两个字符串A和B,求A和B之间的编辑距离,即将A转换成B所需的最少的插入、删除和替换操作次数。 数学模型: 设dp[i][j]表示A的前i个字符和B的前j个字符之间的编辑距离,那么可以得到以下转移方程: 1. 当A[i] == B[j]时,dp[i][j] = dp[i-1][j-1]。 2. 当A[i] != B[j]时,有三种情况: a. 替换操作:dp[i][j] = dp[i-1][j-1] + 1,即将A[i]替换成B[j]。 b. 插入操作:dp[i][j] = dp[i][j-1] + 1,即在A[i]后面插入B[j]。 c. 删除操作:dp[i][j] = dp[i-1][j] + 1,即删除A[i]。 3. 初始值:dp[0][0] = 0,dp[i][0] = i,dp[0][j] = j,即一个字符串为空时,编辑距离为另一个字符串的长度。 优化函数: 因为dp[i][j]只与dp[i-1][j-1]、dp[i-1][j]、dp[i][j-1]有关,因此可以使用滚动数组进行优化,将二维数组降为一维。 标记函数设置: 在转移方程中,如果进行了替换操作,那么可以将A[i]和B[j]标记为相同,表示将A[i]替换成B[j]。 编码实现: 以下是C语言实现序列比对的编辑距离问题的代码: ```c #include <stdio.h> #include <string.h> #define MAXLEN 1000 int min(int a, int b, int c) { if (a < b && a < c) return a; else if (b < a && b < c) return b; else return c; } int edit_distance(char* A, char* B) { int lenA = strlen(A); int lenB = strlen(B); int dp[2][MAXLEN + 1]; int i, j; for (i = 0; i <= lenB; i++) dp[0][i] = i; for (i = 1; i <= lenA; i++) { dp[i % 2][0] = i; for (j = 1; j <= lenB; j++) { if (A[i - 1] == B[j - 1]) dp[i % 2][j] = dp[(i - 1) % 2][j - 1]; else dp[i % 2][j] = min(dp[(i - 1) % 2][j], dp[i % 2][j - 1], dp[(i - 1) % 2][j - 1]) + 1; } } return dp[lenA % 2][lenB]; } int main() { char A[MAXLEN], B[MAXLEN]; printf("请输入字符串A和B:\n"); scanf("%s%s", A, B); printf("编辑距离为:%d\n", edit_distance(A, B)); return 0; } ``` 变量设置及存储: 1. MAXLEN:定义最大字符串长度。 2. dp:滚动数组,存储A和B之间的编辑距离。 3. i,j:循环变量。 时间复杂度: 该算法的时间复杂度为O(lenA * lenB),其中lenA和lenB分别为字符串A和B的长度。 空间复杂度: 该算法的空间复杂度为O(min(lenA, lenB)),因为使用了滚动数组对dp数组进行了优化,只存储了两行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值