zoukankan      html  css  js  c++  java
  • STL之cstring

    字符串处理的题可能有一些可以直接用到STL里面的函数,会很快很方便,比如cstring里面的strncpy和strstr:

    char*strncpy(char*dest,char*src,size_tn):

      为字符串拼接函数,把src字符串的起始地址加上size长度(偏移量),copy到dest数组里面;

    extern char *strstr(char *str1, const char *str2):

      就是在str1里面查找str2,返回一个指针,指向找到的位置,找不到就返回NULL;

    poj 1226.Substrings

    就直接用到了这两个函数秒掉:

    先找出最短的字符串,它的长度设为len,用来枚举每个不同长度(1~len)的子串,拼接给一个空字符串,获得子串sub,然后获得reverse的子串rev;

    然后遍历全部字符串,用strstr判断能否匹配sub和rev!!!

     1 // poj 1226.Substrings
     2 // strstr + strncpy
     3 // references:
     4 // http://blog.sina.com.cn/s/blog_691ce2b70101mapk.html
     5 #include <iostream>
     6 #include <cstdio>
     7 #include <cstring>
     8 #include <algorithm>
     9 
    10 using namespace std;
    11 
    12 const int N = 105;
    13 char s[N][N];
    14 char sub[N];
    15 char rev[N];
    16 
    17 int main()
    18 {
    19     int t;
    20     scanf("%d", &t);
    21     while(t--)
    22     {
    23         int n;
    24         scanf("%d", &n);
    25         int len = 105;
    26         int index = 0;
    27         for(int i=0; i<n; i++)
    28         {
    29             scanf("%s", &s[i]);
    30             if(len > strlen(s[i]))
    31             {
    32                 len = strlen(s[i]);
    33                 index = i;
    34             }
    35         }
    36         bool flag;
    37         int i;
    38         for(i=len; i>=1; i--)
    39         {        
    40             for(int j=0; j<=len-i; j++)
    41             {
    42                 flag = 1;
    43                 memset(sub, 0, sizeof(sub));
    44                 memset(rev, 0, sizeof(rev));
    45                 strncpy(sub, s[index]+j, i);
    46                 //printf("%s ", sub);
    47                 for(int k=0; k<i; k++)
    48                     rev[k] = sub[i-k-1];
    49                 //printf("%s
    ", rev);
    50                 for(int k=0; k<n; k++)
    51                 {
    52                     if(strstr(s[k], sub) == NULL && strstr(s[k], rev) == NULL)
    53                     {
    54                         flag = 0;
    55                         break;
    56                     }
    57                 }
    58                 if(flag)
    59                     break;
    60             }
    61             if(flag)
    62                 break;
    63         }
    64         printf("%d
    ", i);
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    正确显示textarea中输入的回车和空格
    HmacSHA256算法(C# 和 Java)
    Java RSA分段加密
    穿越古代我能做啥?
    DOS常用命令
    C#泛型学习
    一步一步搭建Nuget私服
    深入理解HTTP协议
    PowerDesigner设置code和name不联动的方法
    log4net通过代码控制按分类输出
  • 原文地址:https://www.cnblogs.com/dominjune/p/4713709.html
Copyright © 2011-2022 走看看