IT民工
加油!

这道题是字符串的简单题,主要是为了熟悉四个函数的用法:

strcpy:字串复制   

原型:char *strcpy(char *dest, char *src);   

功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。 

 

strncpy:字串复制 

原型:char * strncpy(char *dest, char *src, size_t n);   

功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样只有遇到NULL才

停止复制,而是多了一个条件停止,就是说如果复制到第n个字符还未遇到NULL,也一样停止),

返回指向dest的指针。

 

函数名: strstr   

函数原型:extern char *strstr(char *str1, char *str2);   

功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。   

返回值:返回该位置的指针,如找不到,返回空指针。  

 

还有一个是我们很熟悉的strcmp,用这四个函数就可以解决这道题了。

/*Accepted    168K    0MS    C++    1056B    2012-07-31 11:30:29*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

const int MAXN = 1 << 4;
const int MAXL = 1 << 6;
char src[MAXN][MAXL], buf[MAXL], res[MAXL], n;

bool find()
{
    int i, j, k, ans = 2;
    for(j = 60; j > ans; j --) //枚举子串长度
    {
        for(i = 0; i <= 60 - j; i ++) //枚举子串在第一个字符串中的起始位置
        {
            strncpy(buf, src[0] + i, j);
            buf[j] = 0;
            if(j > ans || strcmp(buf, res) < 0)
            {
                for(k = 1; k < n; k ++)
                {
                    if(!strstr(src[k], buf))
                        break;
                }
                if(n == k)
                    ans = j, strcpy(res, buf);
            }
        }
    }
    return ans > 2;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T --)
    {
        scanf("%d", &n);
        for(int i = 0; i < n; i ++)
            scanf("%s", src[i]);
        if(!find())
            printf("no significant commonalities\n");
        else
            puts(res);
    }
    return 0;
}

 

 

 

posted on 2012-07-31 11:43  找回失去的  阅读(142)  评论(0编辑  收藏  举报