mooc c语言 字符串比较 动态数组

动态分配数组

include <stdlib.h>
int *a= (int*)malloc(n*sizeof(int));
free(a);      //若 a++; free(a);失败  申请哪个地址还哪个地址

因为malloc成功返回 void*,所以要类型转换,没空间了返回NULL或0

int *p;
int i;
p=&i;
free(p);     //错误
free(NULL);   //正确

所以做定义指针时,最好 int  *p=0

【字符串比较】

题目内容:

题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。


注意,第一个字符的位置是0。


注意,第一个字符串在第二个字符串中的位置可能不止一处。


注意,字符串中可能含有空格。


注意,两个字符串的长度一定大于0。


输入格式:

两个字符串,一行一个。


输出格式:

第一个字符串在第二个字符串中出现的位置,按照从小到到的顺序排列,每个数字后面有一个空格。

如果在第二个字符串中找不到第一个字符串,则输出-1。


输入样例:

abba

ababbba abbabbabbabbaacc


输出样例:

8 11 14 17


#include <string.h>
#include <stdio.h>
 
void myStrCmp(char src_str[], char dis_str[])
{
	int posi=0;
	int i=0,j=0;
	int flag=0;             //没有匹配flag=0; 
	
	while(i<strlen(dis_str))
	{
		while((dis_str[i]==src_str[j])&&src_str[j]!='\0')
		{
			i++;
			j++;
		} 
		 
		if(j==strlen(src_str)) 
		{
		   flag=1;
		   posi=i-j;
		   printf("%d ",posi);	
		  
		   i--;      //根据题目,此处的算法包括上一个匹配字符的最后一个字符 
		   j=0;
		}
		else
		{
			i=i-j+1;    //被匹配字符串指针退回 
			j=0;
		}
	}
	
	if(flag==0) printf("-1");
}

int main(int argc, char** argv) {
	
	char src_str[5];
	char dis_str[30];
	
	gets(src_str);	
	gets(dis_str);
	myStrCmp(src_str,dis_str);
	//gets(c);
	return 0;
}



猜你喜欢

转载自blog.csdn.net/scarletteshu/article/details/79589553