手写字符串函数《一》

本文深入探讨了C语言中关键的字符串操作函数,包括strcpy、strcat、strcmp、strlen、strchr和strstr的实现原理与使用方法。通过具体代码示例,详细解释了这些函数如何在实际编程中进行字符串复制、连接、比较、查找等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要包括strcpy、strcat、strcmp、strlen、strchr、strstr

#include <stdio.h>
#include <stdlib.h>

char *strcpy(char *dest, const char *src)
{
	char *tmp = dest;

	while ((*dest++ = *src++) != '\0')
		/* nothing */;
	return tmp;
}

char *strcat(char *dest, const char *src)
{
	char *tmp = dest;

	while (*dest)
		dest++;
	while ((*dest++ = *src++) != '\0')
		;
	return tmp;
}

int strcmp(const char *cs, const char *ct)
{
	unsigned char c1, c2;

	while (1) {
		c1 = *cs++;
		c2 = *ct++;
		if (c1 != c2)
			return c1 < c2 ? -1 : 1;
		if (!c1)
			break;
	}
	return 0;
}

size_t strlen(const char *s)
{
	const char *sc;

	for (sc = s; *sc != '\0'; ++sc)
		/* nothing */;
	return sc - s;
}

char *strchr(const char *s, int c)
{
	for (; *s != (char)c; ++s)
		if (*s == '\0')
			return NULL;
	return (char *)s;
}

char *strstr(const char *s1, const char *s2)
{
	size_t l1, l2;

	l2 = strlen(s2);
	if (!l2)
		return (char *)s1;
	l1 = strlen(s1);
	while (l1 >= l2) {
		l1--;
		if (!memcmp(s1, s2, l2))
			return (char *)s1;
		s1++;
	}
	return NULL;
}

 

### 手写字符串反转函数 以下是几种常见编程语言的手写字符串反转函数实现方式: #### Python 实现 在 Python 中,可以通过多种方法实现字符串的反转功能。以下是个基于循环的方式实现字符串反转的代码示例[^3]。 ```python def reverse_str(s: str) -> str: new_s = '' while len(s) > 0: new_s += s[-1] s = s[:-1] return new_s # 测试用例 print(reverse_str("abcdefg")) # 输出 "gfedcba" ``` 另种更简洁的方法是利用切片操作 `[::-1]` 来完成字符串反转。 ```python def reverse_str(s: str) -> str: return s[::-1] # 测试用例 print(reverse_str("abcdefg")) # 输出 "gfedcba" ``` --- #### C++ 实现 C++ 提供了标准库 `<algorithm>` 和 `<string>` 的支持,可以轻松实现字符串反转功能。以下是种手动实现的方式[^4]。 ```cpp #include <iostream> #include <string> std::string reverse_string(const std::string& input) { std::string reversed; for (int i = input.size() - 1; i >= 0; --i) { reversed += input[i]; } return reversed; } // 测试用例 int main() { std::string test = "abcdefg"; std::cout << reverse_string(test); // 输出 "gfedcba" return 0; } ``` --- #### JavaScript 实现 JavaScript 可以通过数组的操作来实现字符串的反转功能。以下是个常见的实现方式[^4]。 ```javascript function reverseString(input) { let result = ''; for (let i = input.length - 1; i >= 0; i--) { result += input[i]; } return result; } // 测试用例 console.log(reverseString("abcdefg")); // 输出 "gfedcba" ``` 或者使用内置方法 `.split()`、`.reverse()` 和 `.join()` 组合实现[^4]。 ```javascript function reverseString(input) { return input.split('').reverse().join(''); } // 测试用例 console.log(reverseString("abcdefg")); // 输出 "gfedcba" ``` --- #### Java 实现 Java 中可以借助 `StringBuilder` 类的 `reverse()` 方法快速实现字符串反转功能。如果需要手动实现,则可以用循环处理[^2]。 ```java public class ReverseStringExample { public static String reverseString(String input) { StringBuilder sb = new StringBuilder(); for (int i = input.length() - 1; i >= 0; i--) { sb.append(input.charAt(i)); } return sb.toString(); } // 测试用例 public static void main(String[] args) { System.out.println(reverseString("abcdefg")); // 输出 "gfedcba" } } ``` --- #### 性能比较 不同的实现方式可能会影响性能表现。对于短字符串来说,差异不大;但对于较长的字符串,推荐使用高效的语言特性(如 Python 切片或 C++ 标准库)。具体选择取决于实际需求和使用的编程环境[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值