C和指针第六单元编程练习

1.请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符。这个函数的原型应如下:
char * find_char(char const *source, char const *chars)
它的基本思想是查找source字符串中匹配chars字符串中任何字符的第一个字符,函数然后返回一个指向source中第一个匹配所找到的位置的指针。如果source中的所有字符均不匹配chars中的任何字符,函数就返回一个NULL指针。如果任何一个参数NULL,或任何一个参数所指向的字符串为NULL,或任何一个参数所指向的字符串为空,函数也返回一个NULL指针。
程序如下:

//字符串中查找所有给定字符集中出现的字符

#include<iostream>
#include<cstring>
char *find_char(char const *source,char const *chars)
{			 
	if (source == NULL || chars == NULL)
	{
		return NULL;
	}
	char const *p_src = source;
	char const *p_chr = NULL;
	for (; p_src != NULL;p_src++)
	{
		char tmp = *p_src;
		p_chr = chars;
		for (; p_chr != NULL && *p_chr != 0; p_chr++)
		{
			if (*p_chr == tmp)
			{
				printf("char is : %c\r\n",tmp);
				return (char*)p_src;
			}
		}
	}
	return NULL;
}
int main()
{
	
	char *src = "ABC";
	char *chars = "XAAA";
	find_char(src,chars);	  
	system("pause");
	return 0;
}

输出在这里插入图片描述

2.请编写一个函数,删除一个字符串的一部分。部分原型如下:
int del_substr(char * str, char const * substr)
函数首先应判断substr是否出现在str中。如果它并未出现,函数就返回0;如果出现,函数应该把str中位于该子串后面的所有字符复制带该子串位置,从而删除这个子串,然后这个函数返回1.如果substr多次出现在str中,函数只删除第一次出现的字符。函数的第二个参数绝不会被修改。

#include<iostream>
int del_substr(char *str, char const *substr) 
{ 
	int flag = 0; //判断是否相等 
	char *stringStr = str; 
	char *stringResult = NULL; 
	char const *stringSubstr = substr;
	while (*stringStr != '\0')
	{
		if (*stringStr == *stringSubstr)
		{ 
			flag++; 
			stringResult = stringStr;
			stringStr++;
			stringSubstr++; 
		} 
		else
		{
			stringStr++; 
			stringSubstr = substr; 
		}
		if (*(stringSubstr) == '\0') 
		{
			while (*stringResult)
			{
				*(stringResult - flag) = *(++stringResult);
			}
			return 1;
		}
	}
	return 0;
}
int main()
{
	char s1[] = "Hello world!";
	char s2[] = "llo"; 
	int p = 0;
	p = del_substr(s1, s2); 
	printf("%d\n%s\n", p,s1);
	system("pause");
	return 0;
}

输出结果在这里插入图片描述

编写函数reverse_string,它的原型如下;
void reverse_string(char * string);
函数把参数字符串中的字符返向排列。

#include<iostream>

void reverse_string(char* str)
{
    if (*str == '\0')
    {
        return;
    }
  reverse_string(str + 1);
    printf("%c",*str);
}

int main()
{
    char* arr = "Hello world!";
   reverse_string(arr);
	system("pause");
    return 0;
}

输出结果输出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值