一些函数题(字符串逆置、strlen()、strcpy()、strcat()、strcmp() 、strstr()的手动实现、字符串转十进制整数)

题目

  1. 编写程序,将一个字符串反向存放(编写函数实现)。
  2. 编写程序my_strlen(char *str),测得指定字符串的长度(编写函数实现)
  3. 编写一个字符串拷贝函数,my_strcpy(char *dest,char *src)(编写函数实现)
    将源操作数src中的字符串拷贝到dest所指向的数组中
  4. 编写一个字符串连接函数,my_strcat(char *dest, char *src)(编写函数实现)
    将源操作数src中的字符串连接到dest所指向的数组源字符数组尾部
  5. 编写函数my_strcmp(char *str1, char *str2),比较、返回两等长字符串的大小(编写函数实现)
    要求相等返回0,字符串1大于字符串2返回1,字符串2大于字符串1返回-1
    字符串1的第一个字母大于字符串2的第一个字母,则判定字符串1大于字符串2,相等则比较第二字母,以此类推,全部相同则判定两字符串相等
  6. 编写函数my_strstr(const char *haystack, const char *needle);
    在父串haystack中查找needle第一次出现的起始地址,如果没有找到返回NULL,
    例如:父串”asjgfsjklaejgjwfskajkgjka”中
    查找子串”jg”则返回内容为: jgfskjklaejgjwajkgjka”
    查找子串”fsk”则返回内容为:”fskajkgjka”
    查找字符fskl则返回为NULL
  7. 编写一个函数实现将"12345"变成十进制12345(编写函数实现)

C语言实现代码

#include<stdio.h>

//1.字符串反转
void reverse(char* ss, int ssize) {
	char* p = &ss[0];
	char* q = &ss[ssize - 1];
	while (p < q)
	{
		char tmp;
		tmp = *p;
		*p = *q;
		*q = tmp;
		p++;
		q--;
	}
	printf("---%s\n", ss);
}


//2.测量字符串长度
int	my_strlen(char* ss) {
	int i = 0;
	char* p = ss;
	while (*p != '\0')
	{
		p++;
		i++;
	}

	return i;
}

//3.字符串拷贝
void my_strcpy(char* dest, char* src)
{
	char* p = src;
	char* q = dest;
	while (*p != '\0')
	{
		*q = *p;
		p++;
		q++;
	}
	*q = '\0';
	q = &dest[0];
	
	printf("dest == %s\n", dest);

}

//4.字符串拼接
void my_strcat(char* dest, char* src)
{
	char* p = dest;
	char* q = src;
	while (*p != '\0')
	{
		p++;
	}

	while (*q != '\0')
	{
		*p = *q;
		p++;
		q++;
	}
	*p = '\0';
	printf("dest == %s\n", dest);
}

//5.字符串长度比较
int my_strcmp(char* str1, char* str2) {
	char* p = str1;
	char* q = str2;
	while (*p != '\0' && *q != '\0')
	{
		p++;
		q++;
	}
	if (*p != '\0')
		return 1;
	else if (*q != '\0')
		return -1;
	else
		return 0;
}

//6.第一次出现的地址
int my_strstr(const char* haystack, const char* needle) 
{
	int i = 0;
	const char* p = haystack;
	const char* q = needle;

	int needleSize = 0;
	while (*q != '\0')
	{
		needleSize++;
		q++;
	}
	q = needle;
	char first = 0;
	while (*p != '\0' && *q != '\0') {
		if (*p == *q) {
			p++;
			q++;
			first = i;
		}
		else {
			q = needle;
			p++;
			first = 0;
		}
		i++;
	}
	if (*q == '\0') {
		first -= needleSize;
		first++;
	}
	if (*p == '\0' && *q != '\0')
		return NULL;
	return first;
	
}

//7.字符串转十进制整数
int transport(char* arrs) {
	char* p = arrs;
	int f = 0;
	while (*p != '\0')
	{
		if (*p >= '0' && *p <= '9')
			f = f * 10 + ( *p - '0');
		p++;
	}
	return f;
}

void main()
{
	char s[] = "abcde";
	int ssize = sizeof(s) / sizeof(s[0]);
	ssize--;
	reverse(s, ssize);
	//2.测量字符串长度
	int l = my_strlen(s);
	printf("字符串s长为 :%d\n", l);
	//3.字符串拷贝
	char dest[20];
	char src[] = "yingzi";
	my_strcpy(dest, src);
	//4.字符串拼接
	my_strcat(dest, src);
	//5.字符串比较长度
	int fin = my_strcmp(dest, src);
	printf("返回 : %d\n", fin);
	//6.第一次出现地址
	char haystack[] = "qwedsa123asdf";
	char needle[] = "123asdf";
	int first = my_strstr(haystack,needle);
	char* aa = haystack + first;
	//printf("第一次出现的位置为 : %d\n", first);
	printf("%s\n", aa);
	//7.字符串转十进制数
	int f;
	char arr[] = "123654";
	f = transport(arr);
	printf("转换后的值为 : %d", f);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值