70,020
社区成员




#include <stdio.h>
#include <string.h>
char *findchar(const char **ch, const int n);
int isfind(const char **ch, const int n, char *needfindchar);
char curr[100]={0};//在这里进行了初始化要不然在第一次用到strlen的时候面临着任意数
char maxchar[100]={0};
//"this is local bus"
int main(int argv, char ** argc){
const char *ch[] = {
"what is local busxz12345678901xx",
" is local bus zz12345678901xx",
"local bus is name sdhfjzz12345678901xx"
};
printf("the same is=%s!\n",findchar(ch, 3));
return 1;
}
char *findchar(const char **ch, const int n){
int shornum = 0;
int i;
for(i=0; i< n-1; i++){
//printf("%s\n",ch[i]); 找到n个字符串中最短的
if(strlen(ch[i]) > strlen(ch[i + 1])){
shornum = i+1;
}
}
//printf("%s\n",ch[shornum]);
int len=strlen(ch[shornum]);
int charIndex=0;//第一次以字符查找到的位置
int isfindchar=0;//是否找到
for(i=0; i<len; i++){
if(isfindchar){
memset(curr,'\0',strlen(curr));
strncpy(curr, ch[shornum]+charIndex, i - charIndex + 1);
printf("111=%s,i=%d\n",curr,i);
isfindchar=isfind(ch,n, curr);
if(!isfindchar){//如果没有找到,则需要从没有找到的串的位置重新开始查找
printf("no--\n");
i = i - 1;
if((strlen(curr) - 1) > strlen(maxchar)){
memset(maxchar,'\0',strlen(maxchar));
strncpy(maxchar, ch[shornum]+charIndex, i - charIndex+1);//在这里改成加1。
}
}
if(i==len -1 ){
if((strlen(curr) - 1) > strlen(maxchar)){
memset(maxchar,'\0',strlen(maxchar));
strncpy(maxchar, ch[shornum]+charIndex, i - charIndex + 1);
}
}
}
else
{
memset(curr,'\0',strlen(curr));
strncpy(curr, ch[shornum] + i, 1);
printf("222=%s,i=%d\n",curr,i);
isfindchar=isfind(ch,n, curr);
charIndex = i;
}
}
return maxchar;
}
int isfind(const char **ch, const int n, char *needfindchar){
int isfind = 0;
int i;
for(i=0; i<n; i++){
//printf("---%s\n",ch[i]);
if(strstr(ch[i], needfindchar)) isfind=1;
else{
return 0;
}
}
return isfind;
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void find(const string &str1, const string &str2, vector<string> &result)
{
typedef vector<string>::size_type size_t;
typedef vector<string>::difference_type diff_t;
result.clear();
size_t length = 0;
const size_t length1=str1.length(),
length2=str2.length();
for (size_t pos1=0; length1!=pos1; ++pos1) {
for (size_t pos2=0; length2!=pos2; ++pos2) {
diff_t diff=0;
for (;
pos1+diff != length1 &&
pos2+diff != length2 &&
str1[pos1+diff] == str2[pos2+diff];
++diff) ;
if (length < diff) {
length = diff;
result.clear();
result.push_back( str1.substr(pos1,diff) );
} else if (length == diff) {
length = diff;
result.push_back( str1.substr(pos1,diff) );
}
}
}
}
void findchar (char ** const asd, const size_t n)
{
if (n<1) return;
if (n<2) {
cout << asd[0] << endl;
return;
}
vector<string> result;
find(asd[0], asd[1], result);
typedef vector<string>::const_iterator const_iter;
for (size_t i=2; i!=n; ++i) {
vector<string> list(result);
for (const_iter beg=list.begin(), end=list.end();
beg != end;
++beg) {
find(asd[i],*beg, result);
}
}
for (const_iter beg=result.begin(), end=result.end();
beg != end;
++beg) {
cout << *beg << endl;
}
}
int main()
{
char *asd[3];
char result[256];
char *str0="what is local bus?";
char *str1="this is local bus.";
char *str2="local bus is name sdhfj.";
asd[0] = str0;
asd[1] = str1;
asd[2] = str2;
findchar (asd, 3);
return 0;
}