C字符串经典

POJ1226——Substrings

题意,给定一堆字符串,找出最大的公共子串。

//Date:     2015.04.25
//Time:     0ms
//Memory:   144k

#include <cstdio>
#include <cstring>
using namespace std;

const int MAX_LEN=105;
int n,index,length;
char str[100][MAX_LEN];

void rev(char source[]){	//strrev()在POJ上编译无法通过
    char c;
    int i,j=strlen(source)-1;
    for(i=0;i<j;i++){
        c=source[i];
        source[i]=source[j];
        source[j--]=c;
    }
}

int SubString(){
    bool found;
    int SubLen,i,j;
    char sub_string[MAX_LEN],rev_sub_string[MAX_LEN];
    for(SubLen=length;SubLen;SubLen--){
        for(i=0;i<=length-SubLen;i++){
            strncpy(sub_string,str[index]+i,SubLen);
            strncpy(rev_sub_string,str[index]+i,SubLen);
            sub_string[SubLen]=rev_sub_string[SubLen]='\0';
            rev(rev_sub_string);
            found=true;
            for(j=0;j<n;j++){
                if( (strstr(str[j],sub_string)==NULL) && (strstr(str[j],rev_sub_string)==NULL) ){
                    found=false;
                    break;
                }
            }
            if(found)
                return SubLen;
        }
    }
    return 0;
}

int main(){
    int t,i,temp;
    scanf("%d",&t);
    while(t--){
        length=105;
        scanf("%d",&n);
        getchar();
        for(i=0;i<n;i++){
            gets(str[i]);
            temp=strlen(str[i]);
            if(length>temp){
                length=temp;
                index=i;
            }
        }
        printf("%d\n",SubString());
    }
    return 0;
}
时间: 2024-11-03 22:01:12

C字符串经典的相关文章

递归输出字符串 经典中的经典

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void f(char *p) { if (*p == '\0') { return; } else { f(p + 1); printf("%c\n", *p); } } void main() { char *p = "abcd"; f(p); system("pause"); }

C语言之基本算法39—字符串经典操作

//字符串概念! /* ================================================================== 题目:练习字符串的 1.输入输出     gets(str)             puts(str) 2.长度统计     strlen(str) 3.大小写转换 strupr(str)          strlwr(str) 4.比较大小     strcmp(str1,str2) 5.连接             strcat(s

数组以及字符串经典题

1.数组中只有一个数字只出现一次,其他都成对出现 如:int a[] = {2,3,5,6,4,3,2,5,6};   打印出4. 首先呢,先分析此题. 可将数组的第一个元素与后边其他元素比较,若相同,则将这个元素删除. 如:数组第一个元素为2,当碰到后边那个2时,将后边元素删除.a[] = {2,3,5,6,4,3,5,6}. 然后比较数组第二个,以此类推. 当我们在数组前面找到这个这个只出现一次的元素,即可return.因为题目给出的是只有一个数字只出现一次呢. int FindOneNum

C语言值基本算法43—总结

C程序的基本算法共涵盖42个例题,包含了枚举.排列.逻辑判断.迭代.递推.字符串操作.矩阵操作.格式输出等内容. 相关的实现方法有的显得很笨拙,但足够说明问题,而且每个程序都经过作者亲测,保证可以运行.之所以称之为基本算法,就是为了测试基础知识的掌握,都是从原始的角度进行处理,没有运用过于花哨的处理技巧,作者也是在学习中进步,也希望这些代码对于没有基础或者基础薄弱的朋友带来帮助. 至此,基本知识就掌握了,我们常常会听说C的强大,因为它是面向过程的,在数学领域具有极好的应用,有必要进行进一步的学习

『Re』正则表达式模块_常用方法记录

『Re』知识工程作业_主体识别 一个比较完备的正则表达式介绍 几个基础函数 re.compile(pattern, flags=0) 将正则表达式模式编译成一个正则表达式对象,它可以用于匹配使用它的match ()和search ()等方法. 实际有两种使用方式: pattern.匹配方法(string) 或者 re.匹配方法(pattern,string) 使用或|来强化匹配规则: pattern_t = re.compile( '[0-9〇一二三四五六七八九]{4}年.{1,2}月.{1,3

c语言常见字符串函数经典实现

最近把一些常见的c语言的字符串库函数参照着网上的程序自己实现了一下,也是方便自己复习总结,里面的实现比较经典,下面的函数在我电脑vs2005上都能通过,但未进行严格的测试.点击展开目录,可以直接达到感兴趣的函数实现. /************************************************************************/ /* 1.strcpy函数实现 2.strncpy实现 3.strcat函数实现 4.strncat函数实现 5.strdup实现

【LeetCode-面试算法经典-Java实现】【152-Reverse Words in a String(反转字符串中的单词)】

[152-Reverse Words in a String(反转字符串中的单词)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". 题目大意 给定一个字符串,将其反转,其的字词不转 解题思路

【LeetCode-面试算法经典-Java实现】【008-String to Integer (atoi) (字符串转成整数)】

[008-String to Integer (atoi) (字符串转成整数)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what

nyist oj 37 回文字符串 (动态规划经典)

回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串. 输入 第一行给出整数N(0<N<100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符