C语言实现字符串处理:求长度与子字符串替换
4星 · 超过85%的资源 需积分: 9 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语言编程基础的重要应用,对于理解指针、字符串操作以及循环控制有很好的实践意义。在华为的笔试中,这类题目旨在测试应聘者的编程基本功和问题解决能力。
131 浏览量
2024-07-24 上传
2021-08-30 上传
2013-01-16 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-03-21 上传
erik_km
- 粉丝: 0
- 资源: 1