编程题练习(4)

参考博客:https://www.cnblogs.com/zhangboy/p/7635627.html

字符串匹配算法

法1:暴力匹配法。主串A(长度m),模式串B(长度n),串B逐位移动与串A比较。如果当前字符匹配成功(即A[i] == B[j]),则i++,j++,继续匹配下一个字符;如果匹配失败(即A[i]! = B[j]),令i = i - j + 1,j = 0,即每次匹配失败时,i 回溯到上次开始匹配的下一个位置,j 被置为0。复杂度应该是O (m*n)
法2:KMP匹配。脑子笨,没看懂。时间复杂度为O(m+n)。

字符串比较函数C++实现

strcmp()函数是根据ACSII码的值来比较两个字符串的;strcmp()函数首先将s1字符串的第一个字符值减去s2第一个字符,若差值为零则继续比较下去;若差值不为零,则返回差值。
自己编写实现:

#include
#include
using namespace std;
int cmpstr(char *s1,char *s2)
{
	//int result;
	int i=0;
     while(s1[i]==s2[i] && s1[i]!=‘\0' && s2[i]!='\0')
        i++;
    return s1[i]-s2[i];
}
int main()
{
	char s1[20],s2[20];
	int result;
	cin>>s1;
	cin>>s2;
	result=cmpstr(s1,s2);
	cout<

一个文档中出现次数最多的前三个单词

思路:用Hash表,统计该文档中每个单词出现的次数。对出现次数进行降序排序,则前三个数据即为,该文档中出现次数最多的前三个单词。

实现字符串拼接函数

法1:

#include
#include
using namespace std;
string catstr(string s1,string s2)
{
	//int result;
	int i=0;
    string s;
	s=s1+s2;
    return s;
}
int main()
{
	char s1[20],s2[20];
	string result;
	cin>>s1;
	cin>>s2;
	result=catstr(s1,s2);
	cout<

法2:

#include 
using namespace std;
char *my_strcat(char *str1, char *str2)
{
// str1="1234\0" str2="qwe\0"
   char *p = str1;
   while (*p != '\0') { p++; }// 使得p指向str1的'\0'的位置
     *p = *str2;// '\0'的值设置为str2字符串的第一个值

   do
   {
    str2++;
    p++;
    *p = *str2;//逐次往后赋值
    } while (*str2 != '\0');
    return(str1);//使用指针操作的是地址,这就是为什么返回了所得到的值!
}
int main()
{
   char str1[6], str2[6];
    cout << "input str1" << endl;
    cin >> str1;
    cout << "input str2" << endl;
	cin >> str2;
	cout << my_strcat(str1, str2) << endl;

return 0;
}

在运行方法2时,出现报错。“stack around the variable “str1” was corrupted”
字符越界。
参考博客:https://blog.csdn.net/ck1798333105/article/details/49913889/
原因:这样的错误是程序员在项目到了一定大的时候,它占用的堆栈量就比较大。我也深有体会。因为自己本来编写一个类,运行时没有错,但是在添加成员属性的时候,在其它方式不变的情况下就容易发生这样的错误。所以据此我猜应该是VS2005(2008)在内部就限定了堆栈的大小,当项目足够大的时候,就会溢出。
解决方法:project->配置属性->c/c+±>代码生成->基本运行时检查 设置为默认值

一对兔子,从出生后第7个月起每3个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,第n个月有多少只兔子?

#include 
using namespace std;
int f(int n)
{
	int r=0;
	if(n<10) 
	{
		r=1;
	}
	else
	{
		for(int i=1;i<=((int)(n/7)+1);i++)
		{
			r=r+i*f(n-7*i);
			//r=r+1;
		}
	}
	return r;
}
int main()
{

	int n;
	int r;
	cin>>n;
	r=f(n);
 	cout<

你可能感兴趣的:(编程题练习(4))