编写一个C语言程序模拟实现strlen函数.

strlen函数功能是计算字符串中字符的个数.(除\0外)

而字符串本身就是一个字符数组,只不过末尾以\0结束.

因此,我们只需遍历除\0之外的所有字符即可.

有三种方法可以解决这个问题.

方法一:设置一个整型计数器,遍历字符串.

方法二:通过不断函数自身的递归.

方法三:与方法一类似,设置一个char*变量标记字符串尾部,通过指针相减得到字符长度.



#include <stdio.h>

//方法一:通过设置整型计数器,模拟实现strlen函数.

int my_strlen1(const char *str){

    assert(str);

    int count = 0;

    while(*str++){

        count++;

    }

    return count;

}

//方法二:通过递归,模拟实现strlen函数

int my_strlen2(const char *str){

    assert(str);

    if(*str){

        return (1+my_strlen2(str+1));

    }

        return 0;

}

//方法三:通过char*变量,模拟实现strlen函数

//(库函数中的strlen函数就是这么干的)

int my_strlen3(const char *str){

    const char *end = str;

    assert(str);

    while(*end++){

        ;

    }

    return (end-str-1);

}

int main(){

    char str[]="abcdef";

    printf("str长度是:%d\n",my_strlen1(str));

    printf("str长度是:%d\n",my_strlen2(str));

    printf("str长度是:%d\n",my_strlen3(str));

    return 0;

}


/*
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串长度
参数:
			s:字符数组
返值:返回字符串实际长度,不包括‘\0’在内
```c
int my_strlen(const char *s)
{
	char * sc;
	for (sc = s; *sc != '\0'; ++sc);
	return sc - s;
}
```
*/

 

在C语言中,我们可以创建一个简单的有限状态自动机(DFA,Deterministic Finite Automaton)的模拟程序来识别特定模式。这里,我们假设有一个简单的DFA模型,它有若干个状态,每个状态对应一个字符,以及从当前状态到下一个状态的动作。下面一个基础的DFA识别程序的示例: ```c #include <stdio.h> #include <stdlib.h> typedef struct { char symbol; // 当前字符 int state; // 当前状态编号 } DFAState; // 状态转移函数,根据输入字符和当前状态决定下一个状态 int transition(DFAState* dfa, char input) { switch (dfa->state) { case 0: if (input == 'a') return 1; else return 0; case 1: if (input == 'b') return 2; else return 1; // 添加更多状态和条件... default: return -1; // 如果找不到对应的规则,表示无法识别 } } // 主函数,接收用户输入并处理 int main() { DFAState machine = {'.', 0}; // 初始化状态为开始状态 char input[10]; printf("Enter a string to be recognized by the DFA: "); fgets(input, sizeof(input), stdin); input[strlen(input) - 1] = '\0'; // remove newline at the end for (char c : input) { machine.state = transition(&machine, c); // 更新状态 if (machine.state == -1) break; // 如果无法继续则停止 } if (machine.state == 3) { printf("The string is accepted.\n"); } else { printf("The string is not accepted.\n"); } return 0; } ``` 这个例子中,我们构建了一个简单的DFA,用于识别"ab"模式。实际应用中,你需要根据具体的DFA设计`transition`函数,并添加更多的状态和转换规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值