C语言提高篇(二)

两个简单的指针操作,看看你是否有思路并且能实现。

1.请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定 字符集合中出现的字符

查找source字符串中匹配chars字符串中任何字符的第1个字 符,函数然后返回一个指向source中第1个匹配所找到的位置的指针。如果source 中的所有字符均不匹配chars中的任何字符,函数就返回一个NULL指针。如果任何 一个参数为NULL,或任何一个参数所指向的字符串为空,函数也返回一个NULL指 针。 举个例子,假定source指向ABCDEF。如果chars指向XYZ、JURY或QQQQ,函数 就返回一个NULL指针。如果chars指向XRCQEF,函数就返回一个指向source中C字 符的指针。参数所指向的字符串是绝不会被修改的。

函数原型:char *find_char( char const *source, char const *chars );

实现:

char* find_char(char const* source, char const* chars)
{
	char* temp_1 = source;
	char* temp_2 = chars;
	if (source == NULL || chars == NULL)
		return NULL;
	while (*temp_1 != '\0')
	{
		temp_2 = chars;
		while (*temp_2 != '\0')
		{
			if (*temp_1 == *temp_2)
				return *temp_1;
			temp_2++;
		}
		temp_1++;
	}
	return NULL;
}

测试:

	char const* soucre = "nsdfgh";
	char const* chars = "bbsabs";
	char* vp = NULL;
	char res = '0';
	vp = find_char(soucre, chars);

	if (vp == NULL)
		printf("Defult");
	else
	{

		printf("sucess %c", vp);
	}

find_char 函数接收两个参数:source 表示源字符串,chars 表示字符集合字符串。函数会遍历 source 字符串,逐个字符与 chars 字符集合进行比较。如果找到匹配的字符,函数会返回该字符在 source 字符串中的位置(指针)。如果没有找到匹配字符,函数返回 NULL

注意:

不能写成:

	while (*temp_1++ != '\0')
	{
		temp_2 = chars;
		while (*temp_2++ != '\0')
		{
			if (*temp_1 == *temp_2)
				return *temp_1;
			
		}
		
	}
	return NULL;

这样的后果是:soucre的第一个字符被忽略

2.函数把参数字符串中的字符反向排列

函数把参数字符串中的字符反向排列。请使用指针而不是数组下标,不要使用 任何C函数库中用于操纵字符串的函数。不能声明一个局部数组来临时存储参数字符串。

函数原型:void reverse_string( char *string );

实现:

void reverse_string(char* str)
{
	char* temp = str;
	while (*temp != '\0')
	{
		temp++;
	}
	int offest = temp - str;
	temp--;
	for (int i = 0; i < offest / 2; i++)
	{
		char  tempchar;
		tempchar = *str;
		*str = *temp;
		*temp = tempchar;
		str++;
		temp--;
	}
}

测试:

注意:

声明一个字符串有两种写法:

char* soucre="abcdefg";
char soucre[]="abcdefg";

对于声明 char* source = "abcdefg";,在语法上是合法的,但在 C 语言中,这种声明方式存在潜在的问题。在这种情况下,source 是一个字符指针,指向字符串常量 "abcdefg" 的首字符。然而,字符串常量是只读的,其内容不能被修改

这意味着,尝试通过修改 source 指针所指向的字符串内容可能会导致未定义的行为。在某些情况下,这可能会导致程序崩溃或产生意外结果。

如果需要修改字符串的内容,应该使用字符数组而不是字符指针来存储字符串。例如,可以使用 char source[] = "abcdefg"; 来声明一个字符数组,并对其进行修改。这样更安全可靠。

如果您只需要读取字符串内容而不修改它,那么使用字符指针是合适的。但请确保不会尝试修改字符串常量的内容,以避免潜在的问题。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值