C语言:有关字符串函数的一些自我实现

目录

一、字符串函数

1.实现我的strlen()

2.我的字符串拷贝

3.字符串拼接

4.字符串比较

二、字符串练习

1.查找一个字符在另外一个字符串中第一次出现的下标

 2.返回第一次的地址

3.查找一个字符串在另外一个字符串中出现的地址 abcccccde ccd

4.统计字符串中单词的个数

5.将一个字符串插入到另一个字符串中

6.翻转字符串

7.GetString()


一、字符串函数

1.实现我的strlen()

#include <stdio.h>

int MyStrlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	str = '\0';
	return count;
}
int main()
{

	char str[] = "abcde";
	printf("%d\n", MyStrlen(str));


	return 0;
}

2.我的字符串拷贝

#include <stdio.h>


char* MyStrcpy(char* str1, char* str2)
{
	char* pMark = str1;
	while (*str2 != '\0')
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = '\0';
	return pMark;
}
int main()
{
	char str[20];
	char str1[] = "abcde";

	printf("%s\n", MyStrcpy(str, str1));

	return 0;
}

3.字符串拼接

#include <stdio.h>

char* MyStrCat(char* str1, char* str2)
{
	char* pMark = str1;
	while (*str1 != '\0')
	{
		str1++;
	}
	while (*str2 != '\0')
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = '\0';
	return pMark;
}
int main()
{
	char str[10] = "abcd";
	char* str1 = "1234";
	printf("%s\n", MyStrCat(str,str1));

	return 0;
}

4.字符串比较

#include <stdio.h>

int MyStrcmp(char* str1,char* str2)
{
	/*while (*str1 != '\0' && *str2 != '\0')  //第一种方法
	{
		if (*str1 > *str2)
		{
			return 1;
		}
		else if (*str1 < *str2)
		{
			return -1;
		}
		else
		{
			str1++;
			str2++;
		}
	}
	if (*str1 > *str2)
	{
		return 1;
	}
	else if (*str1 < *str2)
	{
		return -1;
	}
	else
	{
		return 0;
	}*/
	while (*str1 != '\0' || *str2 != '\0')   //第二种方法
	{
		if (*str1 > *str2)
		{
			return 1;
		}
		else if (*str1 < *str2)
		{
			return -1;
		}
		else
		{
			str1++;
			str2++;
		}
	}
	return 0;
}
int main()
{

	printf("%d\n", MyStrcmp("abc", "abc"));
	printf("%d\n", MyStrcmp("ab", "abc"));
	printf("%d\n", MyStrcmp("ac", "abc"));




	return 0;
}

二、字符串练习

1.查找一个字符在另外一个字符串中第一次出现的下标

#include <stdio.h>
int T1(char* str, char ch)
{
	int count = 0;
	while (*str != '\0')
	{
		if (*str == ch)
		{
			return count;
		}
		str++;
		count++;
	}
	return  -1;
}
int main()
{
	printf("%d\n", T1("abcd", 'b'));
	return 0;
}

 输出:

1      //因为为下表所以为第二个元素

D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 4356)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

 2.返回第一次的地址

#include <stdio.h>
char* T2(char* str, char ch)
{
	while (*str != '\0')
	{
		if (*str == ch)
		{
			return str;
		}
		str++;
	}
	return NULL;
}
int main()
{
	printf("%c\n",*T2("abcd",'b'));
	return 0;
}

输出

b     //因想要便于观察 所以用%c打印

D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 17304)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

3.查找一个字符串在另外一个字符串中出现的地址 abcccccde ccd

#include <stdio.h>
#include <stdlib.h>
char* t3(char* str1, char* str2)
{
	while (*str1 != '\0')
	{
		if (0 == strncmp(str1, str2, strlen(str2)))
		{
			return str1;
		}
		str1++;
	}
	return NULL;
 }
int main()
{
	printf("%s\n", t3("abcccccde", "ccd"));
	return 0;
}

输出

ccde               //因便于观察,所以用%c打印

D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 22856)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

4.统计字符串中单词的个数

#include <stdio.h>
int T4(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		if (*str == ' ')
		{
			count++;
		}
		str++;
	}
	return count + 1;
}
int main()
{
	printf("%d\n", T4("i love you"));
	return 0;
}

输出

3
 
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 19016)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

5.将一个字符串插入到另一个字符串中

#include <stdio.h>
void T5(char* str1, char* str2, int n)
{
	char* phead = str1 + n - 1;
	char* pend = str1 + strlen(str2);
	while(phead <= pend)
	{
		*(pend + strlen(str2)) = *pend;
		pend--;
	}
	while (*str2 != '\0')
	{
		*phead = *str2;
		phead++;
		str2++;
	} 
}
int main()
{
	char str[20] = "abcd";
	T5(str, "12345", 3);
	printf("%s\n", str);
	return 0;
}

 输出

ab12345cd

D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 14688)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

6.翻转字符串

#include <stdio.h>
void T6(char* str)
{
	char* pbegin = str;
	char* pend = str + strlen(str) - 1;
	while (pbegin < pend)
	{
		char ptemp = *pbegin;
		*pbegin = *pend;
		*pend = ptemp;
		pbegin++;
		pend--;
	}
}
int main()
{
	char str[20] = "abcd";
	T6(str);
	printf("%s\n", str);

	return 0;
}

 输出

dcba

D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 9832)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

7.GetString()

#include <stdio.h>
#include <stdlib.h>
char* Getstring()
{
	int size = 5;
	char* str = (char*)malloc(sizeof(char) * size);
	int count = 0;
	char ch;

	while ((ch = getchar()) != '\n')
	{
		str[count] = ch;
		count++;
		if (count == size)
		{
			size += 5;
			str = realloc(str, size);
		}
	}
	str[count] = '\0';
	return str;
}
int  main()
{
	char* str = Getstring();
	printf("%s\n", str);
	free(str);
	return 0;
}

输出

1234
1234

D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 18236)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值