C语言实现字符串处理:求长度与子字符串替换

4星 · 超过85%的资源 需积分: 9 12 下载量 166 浏览量 更新于2024-09-15 收藏 56KB DOC 举报
"2012年最全的华为笔试题" 在这些华为笔试题中,主要涉及了两个C语言编程相关的知识点,分别是使用指针计算字符串长度和实现字符串中的子字符串替换。 首先,我们来看第一个知识点:使用指针求字符串长度。在C语言中,字符串是由字符数组表示的,通常以空字符'\0'作为结束标志。在这个问题中,通过定义一个指针`p`并初始化为字符串首地址,然后通过循环来追踪指针`p`的移动,直到遇到空字符为止,从而计算字符串的长度。具体代码如下: ```c char str[20], *p; int length = 0; printf("Please input a string:"); gets(str); p = str; while (*p++) { length++; } printf("The length of string is %d\n", length); ``` 这段代码中,`*p++`首先返回当前指针位置的字符,然后将指针向后移动一位。当遇到空字符时,循环停止,`length`即为字符串的长度。 第二个知识点是实现字符串中子字符串的替换。这个问题要求编写一个名为`StrReplace`的函数,该函数接收三个参数:源字符串`strSrc`,待替换的子字符串`strFind`,以及替换后的字符串`strReplace`。代码示例给出了两种解决方案。 第一种方法中,函数`StrReplace`通过遍历源字符串`strSrc`,逐字符与待替换的子字符串`strFind`进行比较。如果找到匹配的子字符串,就依次用`strReplace`中的字符替换掉`strFind`的字符。这种方法需要注意的是,如果子字符串不完全匹配,应跳过不一致的部分,继续搜索。以下是这个方法的代码: ```c void StrReplace(char* strSrc, char* strFind, char* strReplace) { int i = 0; int j; int n = strlen(strSrc); int k = strlen(strFind); for (i = 0; i < n; i++) { if (*(strSrc + i) == *strFind) { for (j = 0; j < k; j++) { if (*(strSrc + i + j) == *(strFind + j)) { *(strSrc + i + j) = *(strReplace + j); } else { continue; } } } } } ``` 第二种方法同样遍历源字符串,但使用了`#define MAX`预处理器指令来设置字符串的最大长度。当找到匹配的子字符串时,用`strReplace`的字符替换,并通过判断子字符串长度来避免超出范围。这种方法的代码如下: ```c #include<stdio.h> #define MAX 100 void StrReplace(char* strSrc, char* strFind, char* strReplace) { int i, j, n, k; n = strlen(strSrc); k = strlen(strFind); for (i = 0; i <= n - k; i++) { // 注意这里用小于等于,防止越界 if (strncmp(strSrc + i, strFind, k) == 0) { // 使用strncmp进行子字符串比较 for (j = 0; j < k; j++) { *(strSrc + i + j) = *(strReplace + j); } i += k - 1; // 跳过已替换的子字符串,避免重复替换 } } } int main() { // ... } ``` 这两个问题都是C语言编程基础的重要应用,对于理解指针、字符串操作以及循环控制有很好的实践意义。在华为的笔试中,这类题目旨在测试应聘者的编程基本功和问题解决能力。