OpenJudge2744

这个, 题目看不懂, 看了一下下课本, 哎。

编完后, GCC++ 4.4 不能编译strstr函数。

也不知道是不是所有平台上的GCC++ 4.4都不能编译。

自己编了一个逆序的函数。

 

 

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>

using namespace std; 


char str[100][101];
int n;

void rev(char c[])
{
	int len=strlen(c);
	int i, j;
	for(i=0, j=len-1; i<j; i++, j--)
	{
		c[len] = c[i];
		c[i] = c[j];
		c[j] = c[len];
	}
	c[len]='\0';
}

int search(char c[])
{
	char substr[101], revsub[101]; 
	int i, j, len, k, flat, maxlen=0;

	len = strlen(c);
	for(i=0; i<len; i++)
	{
		for(j=len; j>i; j--)
		{
			strncpy(substr, c+i, j-i); 
			strncpy(revsub, c+i, j-i); 
			substr[j-i] = revsub[j-i] = '\0';
			rev(revsub); 
			flat=1;
			for(k=0; k<n; k++)
			{
				if(strstr(str[k], substr)==NULL && strstr(str[k], revsub)==NULL)
				{
					flat=0;
					break;
				}
			}
			if(flat==1 && maxlen<strlen(substr))
			{
				maxlen = strlen(substr);
			}
		}
	}
	return maxlen;
}

int main()
{
	//ifstream in("OpenJudgeText.txt"); 
	int t, i, maxsub, minlen;
	char tmp[101];
	cin>>t;

	while(t--)
	{
		cin>>n;
		cin>>str[0];
	
		strcpy(tmp,str[0]); 
		minlen = strlen(tmp); 
		for(i=1; i<n; i++)
		{
			cin>>str[i];
			
			if(strlen(str[i]) < minlen)
			{
				strcpy(tmp,str[i]);
				minlen = strlen(tmp);
			}
		}
		maxsub = search(tmp);
		printf("%d\n", maxsub);
	}

	return 0; 
}


 

你可能感兴趣的:(c,gcc,null,search,平台)