user-0 提问: 今天遇到的2个题目,我承认我才疏学浅,第二个做没做出来......

回复:
user: user-1
content: 不能用C库？？？？ 那C语言考个毛啊，出题的人脑子有问题吧。考什么，考算法吗

user: user-2
content: 可以尝试kmp算法

user: user-3
content: 第二题很简单啊：直接贴代码int main() {	 	char* p = "123 123 1234 12345 3123 6123 132"; 	char* tem = "123"; 	int number = 0; 	while(*p) 	{ 		if (*p == *tem) 		{ 			int count = 0; 			int flag = 1; 			while (*(tem + count) != '\0' && *(p + count) != '\0') 			{ 				if (*(p + count) != *(tem + count)) 				{ 					flag = 0; 					break; 				} 				count++; 			} 			if (flag == 1) 			{ 				number++; 				p = p + count; 			}else 				p++; 		}else 			p++; 	} 	return 0;   } 楼主看可否满足条件

user: user-4
content: 好有难度啊！！！

user: user-5
content: http://attachment:/1/Fastest-strstr-like-function-in-C.htm

user: user-6
content: 第一个题目的方法  把元素弄数组里，直接打出来就ok了   #include <stdio.h> #include <string.h>  #define N 129  int main(){ 	int i,j,a[N]={0}; 	char str[N];  	scanf("%[^\n]%*c",str);  	for(i=0;str[i]!='\0';++i){ 		++a[str[i]]; 	}  	for(i=0;i<N;++i){ 		for(j=0;j<a[i];++j){ 			printf("%c",i); 		} 	} 	printf("\n"); 	return 0; }

user: user-7
content: 引用 2 楼 nice_cxf 的回复:1楼大概没仔细看，要求一层循环，这种题目不清楚要考什么，感觉没啥意义。。。 考的就是代码优化，大家都会暴力解决还要你做什么，越节约资源的人越是大牛

user: user-8
content: 这个问题我觉得完全可以参考数据结构（C语言）版书籍，上面在讲表这一数据结构时，有讲到从长串中如何最低时间复杂度来查找子串，用的就是KMP算法，它也就是优化指针回遡，通过一个next函数，在查找子串较长时比较明显

user: user-9
content: 33L 的 “aaaaa” “aaa”   不能通过哦   引用 33 楼 kou753852951 的回复:#include <stdio.h> void fun(char *a, char *b) { 	int num=0; 	char *s=b; 	int f=0; 	while(*a) 	{ 		if(*a == *s) 		{ 		//	printf("%c %c\n",*a,*s); 			if(*(s+1) == '\0') 			{ 				++num; 				s=b; 			} 			else 				++s; 		 ++f;			 		} 		else 		{ 		//	printf("%c %c\n",*a,*s); 			s=b; 			if(f != 0) 			{ 				a-=f; 				f=0;	 			}				 		} 		a++;										 	} 	printf("%d",num); 			 }  int main() { 	char *a="abdxabdxabca"; 	char *b="abdxabc";	 	fun(a,b); 	getch(); }  终极版，均可通过！ 下面 是自己又更新的代码： #include "stdio.h"   int main(int argc, char* argv[]) { 	const char *str="aaaa"; 	const char *t="aaa"; 	const char *p=t; 	int i=0; 	int j=0; 	int count=0; 	int count1=0; 	while (*str) 	{  		if(*str==*t) 		{ 			t++;  			if(*t==NULL) 			{ 				count++; 			} 		} 		else  		{ 			t=p; 			str=str-count1; 			count1=0; 		} 		str++; 		count1++;   	} 	printf("%d",count); 	return 0; }

user: user-9
content: int main(int argc, char* argv[]) { 	const char *str="AAB"; 	const char *t="AB"; 	const char *p=t; 	int i=0; 	int j=0; 	int count=0; 	while (*str) 	{ 		if(*str==*t) 		{ 			t++;  			if(*t==NULL) 			{ 				count++; 			} 		} 		else  		{ 			t=p; 			str--; 		} 		str++;   	} 	printf("%d",count); 	return 0; } 改进了一下 刚才的代码 若果 AAB AB 找不出来··

user: user-9
content: 感觉第2题 挺简单的··int main(int argc, char* argv[]) { 	const char *str="good foor foo"; 	const char *t="oo"; 	const char *p=t; 	int i=0; 	int j=0; 	int count=0; 	while (*str) 	{ 		if(*str==*t) 		{ 			t++; 			if(*t==NULL) 			{ 				count++; 			} 		} 		else  			t=p; 		*str++; 	} 	printf("%d",count); 	return 0; }

user: user-10
content: 第二题感觉在KMP算法上稍微改改就好了。

user: user-11
content: 应用数据结构中串的模式匹配应该可以把

user: user-12

user: user-13
content: #include <stdio.h>  int main() { 	int Count = 0; //存放查找到的次数 	int i; //存放现查到的位置 	int cnow = 0;//存放现照到第几个字符 	char bche[] = "abcabccdabc";//存放用来查找的字符串 	char che[] = "abc";//存放需要查找的字符串 	for(i = 0;bche[i] != 0;i ++) 	{ 		if(che[cnow] != 0) 		{ 			if(bche[i] == che[cnow]) 			{ 				cnow ++; 			} 			else 			{ 				cnow = 0; 			}  		} 		else 		{ 			Count ++; 			cnow = 0; 			i--;  		} 		if(bche[i+1] == 0 && che[cnow] == 0) 			Count ++; 			 	} 	return 0; }

user: user-14
content: 引用 10 楼 qq523176585 的回复:暂时只能想到这个，mark一下  #include <stdio.h>  int main(void) { 	const char *str1 = "lamp hamp bamp namp amp apm"; 	const char *str2 = "amp"; 	int count = 0; 	int n; 	while(*str1) 	{ 		for(n=0; *(str1+n) == *(str2+n); n++) 		{ 			if (!*(str2+n+1)) 			{ 				count++; 			} 		 		} 		str1++; 	}  	printf("字符串str1包含 %d 个字符串str2 !\n",count); 	return 0;   }    这个真的不错  我想的是输入一个字符串用数组的方式存储，然后for循环一一比对。你这个方法更好

user: user-15
content: 数据结构里面有个kmp算法，可以做第二个

user: user-16
content: // stringMatch.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include "iostream" using namespace std;  int StringMatch(char *p, char* s) { 	int count = 0; 	char *head = s; 	while (*p != '\0') 		{ 			if (*p == *s) 				s++; 			else 				s = head; 			p++;  			if (*s == '\0') 			{ 				count++; 				s = head; 			}	  		}  	return count; } int main(int argc, char* argv[]) { 	char string[100];//带匹配字符串 	char pattrn[100];//模式串 	 	cin >> string; 	cin >> pattrn;  	cout << "匹配数" << StringMatch(string, pattrn); 	return 0; }

user: user-17
content: 引用 18 楼 WhiteBird99 的回复:第一题,没说清楚字符串内容.那么就认为全是ASCII字符,采用字典的方式进行计数,读到0为结束符. 构造一个数组,索引就是字符的ASCII码,例,从字符串中读到'A',数组索引为'A'的值+1. 读到0结束时,将数组每个元素代表的ASCII从头到尾按计数个数打一遍.  第二题,没想到一个循环怎么做.楼上几位的应该行,我先看看 有点作弊的思路：把两个循环硬合成一个，用一个flag表明自己在哪个的循环里。

user: user-18
content: copy,copy