欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第六章编程练习第一题

程序员文章站 2024-02-29 17:22:28
...
题目:请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符串集合中出现的字符。这个函数的原型应该如下:
char *find_char(char  *source, char  *chars);

它的基本功能是:

1.查找source字符串中匹配chars字符串中任何字符的第一个字符,然后函数返回一个指向source中第一个匹配所找到的位置的指针。

2.如果scource中的所有字符均布匹配chars中的任何字符,函数就返回一个NULL指针。

3.如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数野返回一个NULL指针。

例如:假定source指向ABCDEF。如果chars指向XYZ、JURY或QQQQ,函数就返回一个NULL指针。如果chars指向XRCQEF,函数就返回一个指向source中C字符的指针。参数所指向的字符串是绝不会被修改的。

要求:

a.你不应该使用任何用于操纵字符串的库函数(如strcpy,strcmp,index等);

b.函数中的任何地方都不应该使用下标引用。

//*********************************************************************************************************************

#include<stdio.h>
char *find_char(char  *source, char  *chars);
int main()
{
	char C1[] = "bbbbgggghhhh";
	char C2[] = "aaaassss";
	printf("%c\n",*find_char(C1, C2));
	return 0;
}
char *find_char(char  *source, char  *chars)
{
	char a = 0;
	int k = 0;
	int l = 0;
        char *null=NULL;//返回的NULL指针;
	char  *i = &a;
	char  *j = &a;
	int n1 = 0;
	int n2 = 0;
	i = source;
	j = chars;
	while (*i != '\0') {
		n1++;
		i++;
	}//计算出source数组的长度;n1,即为source字符串的长度;
	printf("%d\n", n1);
	while (*j != '\0') {
		n2++;
		j++;
	}//计算出chars数组的长度;n2,即为chars字符串的长度;
	printf("%d\n", n2);
	i = source;
	j = chars;
	for (k;k < n1;k++) {
		j = chars;
		l = 0;
		for (l;l < n2;l++) {
			if (*i == *j) {
				return i;
			}
			if (*i == NULL || *j == NULL) {
				return null;
			}
			j++;
		}
		i++;
	}
	return null;
}
	
/* 对于这个要求:3.如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数野返回一个NULL指针。
for (k;k < n1;k++) 
for (l;l < n2;l++) 
这两个判断语句已经可以判断字符串是否为空,为空的话n1||n2==0;那么不管是经过循环还是直接跳出循环返回NULL都是符合要求的。