• C语言-字符串


    问题:

    给出的区分大小写的字母字符的字符串,找到最大的字符串X,或者为X,或者其逆可以找到任何给定的字符串的子串

    输入:

    输入文件的第一行包含一个整数t(1 < = t < = 10),测试用例的数量,其次是每个测试用例的输入数据。每个测试用例的第一行包含一个整数(1 < = n < = 100),给定字符串的数量,其次是n行,每个代表一个字符串的最小长度1和最大长度100。之前和之后没有额外的空白字符串。

    输出:

    每个测试用例应该有一行包含发现的最大字符串的长度

    样例输入:

    2
    3
    ABCD
    BCDFF
    BRCD
    2
    rose
    orchid

    样例输出:

    2
    2

    解题代码中用到的处理字符串函数:

    strcpy: 
    char * strcpy(char * strDest,const char * strSrc);
    就是将后面的数组赋给前面。如果前面数组长度不够大,运行崩溃。
     
    strncpy:
    char*strncpy(char*dest,char*src,size_tnum);
    这个与strcpy差别在于,它可以控制长度,当然这两者都可以通过控制 第二个数组的头位置来控制赋值起点。
     
    strlen:
    extern unsigned int strlen(char *s);
    这个就是返回s数组长度(不包括'')
     
    strstr:
    extern char *strstr(const char *str1, const char *str2);
    这个函数就是查找str2在str1中的位置,若不存在返回NULL。
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 char str[101][101];
     4 int sum1;//每组测试数据中的字符串个数
     5 int find_sub(int len,int index)
     6 {
     7     char s[101],pos[101],rev[101];
     8     int length;
     9     int i,j;
    10     int flag;
    11     strcpy(s,str[index]);
    12     length=len;
    13     while(length>0)
    14     {
    15         flag=0;
    16         for(i=0;i<=len-length;i++)
    17         {
    18             flag=1;
    19             //得到正向的字符子串
    20             strncpy(pos,s+i,length);
    21             //得到逆向的字符子串
    22             for(j=0;j<length;j++)
    23             {
    24                 rev[j]=pos[length-j-1];
    25             }
    26             //末尾加上结束符
    27             pos[length]=rev[length]='';
    28             //判断改组的所有字符串中是否有相应的子串
    29             for(i=0;i<sum1;i++)
    30             {
    31                 if(strstr(str[i],pos)==NULL&&strstr(str[i],rev)==NULL)
    32                 {
    33                     flag=0;
    34                     break;
    35                 }
    36             }
    37             if(flag)break;
    38         }
    39         if(flag)
    40             break;
    41         else
    42             --length;
    43     }
    44     return length;
    45 }
    46 int main()
    47 {
    48     int sum;//测试的数据数量
    49     int len_min;
    50     int i;
    51     int index;//记录最短子串的位置
    52     scanf("%d",&sum);
    53     while(sum--)
    54     {
    55         scanf("%d",&sum1);
    56         len_min=101;
    57         for(i=0;i<sum1;i++)
    58         {
    59             scanf("%s",str[i]);
    60             //找到最短的字符串
    61             if(strlen(str[i])<(len_min))
    62             {
    63                 len_min=strlen(str[i]);
    64                 index=i;
    65             }
    66         }
    67         printf("%d
    ",find_sub(len_min,index));
    68     }
    69     return 0;
    70 }

    运行结果:

  • 相关阅读:
    MBR记录
    execute,executeQuery,executeUpdate的区别是什么?
    JDBC访问数据库的基本步骤是什么?
    什么是JDBC,在上面时候会用到它?
    int 和 Integer 有什么区别
    String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
    final finally finalize区别
    Java有哪些基本数据类型
    面向过程和面向对象的区别
    JDK,JRE,JVM三者关系
  • 原文地址:https://www.cnblogs.com/xiaojingang/p/3758195.html
Copyright © 2020-2023  润新知