/*
使用c语言知识实现下面程序:
1,实现strlen函数的功能
2,实现strcpy函数的功能
3,实现strcat函数的功能
4,实现strcmp函数的功能
不允许使用已有的str函数
*/

  1 #define _CRT_SECURE_NO_WARNINGS
2 #include<stdio.h>
3 #include<string.h>
4 #include<stdbool.h>
5 #include<stdlib.h>
6 #include<math.h>
7 /*
8 使用c语言知识实现下面程序:
9 1,实现strlen函数的功能
10 2,实现strcpy函数的功能
11 3,实现strcat函数的功能
12 4,实现strcmp函数的功能
13 不允许使用已有的str函数
14 */
15 int mystrlen(char ch[]) {
16 int i, len = 0;
17 for (i = 0; ch[i]!='\0'; i++) {
18 len++;
19 }
20 return len;
21 }
22
23 char * mystrcpy(char des[], char src[]) {
24 int len_des = mystrlen(des);
25 int len_src = mystrlen(src);
26 int i;
27 if (len_des < len_src) {
28 //des[]的长度不够
29 return -1;
30 }
31 for (i = 0; des[i] != '\0'; i++) {
32 //des[]最终会被修改掉,所以提前全部写为结束符,保证后续无错。
33 des[i] = '\0';
34 }
35 for (i = 0; src[i] != '\0'; i++) {
36 des[i] = src[i];
37 }
38 des[i] = '\0';
39 return des;
40 }
41
42 char * mystrcat(char des[], char src[]) {
43 int len_des = mystrlen(des);
44 int len_src = mystrlen(src);
45 int flag = 0;
46 int i;
47 if (len_src <= 0 || len_des <= 0) {
48 return -EFAULT;
49 }
50 for (i = 0; des[i] != '\0'; i++) {
51 flag += 1;
52 }
53 for (i = 0; src[i] != '\0'; i++) {
54 des[flag] = src[i];
55 flag++;
56 }
57 return des;
58 }
59
60 int mystrcmp(char des[], char src[]) {
61 int len_des = mystrlen(des);
62 int len_src = mystrlen(src);
63 int i;
64 if (len_src < 0 || len_des < 0) {
65 return -EFAULT;
66 }
67 if (len_des > len_src) {
68 return 1;
69 }
70 else if (len_des == len_src) {
71 for (i = 0; i < len_des && i < len_src; i++) {
72 if (des[i] < src[i]) {
73 return -1;
74 }
75 else if (des[i] > src[i]) {
76 return 1;
77 }
78 }
79 return 0;
80 }
81 else if (len_des < len_src) {
82 return -1;
83 }
84 }
85
86 int main()
87 {
88 char str1[20] = "hello_world";
89 char str2[] = "apple";
90 char str3[] = "pie";
91 int len;
92 int sign;
93
94 len = mystrlen(str1);
95 printf("str1 len is %d\n", len);
96 len = mystrlen(str2);
97 printf("str2 len is %d\n", len);
98
99 mystrcpy(str1, str2); //到这里str1已经是apple了。
100 printf("mystrcpy str1 is:%s\n", str1);
101
102 mystrcat(str1, str3); //到这里str1应该是applepie。
103 printf("mystrcat str1 is:%s\n", str1);
104
105 sign = mystrcmp(str1, str3);
106 printf("mystrcmp is:%d\n", sign);
107
108 return 0;
109 }
11
 

c语言小练习——字符串长度、拷贝、拼接、比较的更多相关文章

  1. Swift3.0语言教程获取字符串长度

    Swift3.0语言教程获取字符串长度 Swift3.0语言教程获取字符串长度,当在一个字符串中存在很多的字符时,如果想要计算字符串的长度时相当麻烦的一件事情,在NSString中可以使用length ...

  2. C 语言实例 - 计算字符串长度

    C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...

  3. go语言:获取字符串长度

    go语言字符串底层由字节数组实现,使用UTF-8编码,初始化以后不能被修改 获取字符串长度 一.当字符串中所有字符都是单字节字符时,使用 len 函数获取字符串的长度 package main imp ...

  4. C语言字符串长度(转)

    C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...

  5. 基于visual Studio2013解决C语言竞赛题之0704字符串长度

     题目

  6. C#指定长度截取字符串 并进行拼接。

    需求:有一个字符串需要按照指定长度拆分出来,然后在增加一个字符串拼接上. /// <summary> /// 字符串截取并拼接 /// </summary> /// <p ...

  7. C语言中求字符串的长度

    在C语言中求字符串的长度,可以使用sizeof()函数和strlen()函数,后者需要引入string.h (#include <string.h>) 因为C语言字符串是以 \0 结尾表示 ...

  8. YTU 2417: C语言习题 字符串长度

    2417: C语言习题 字符串长度 时间限制: 1 Sec  内存限制: 128 MB 提交: 758  解决: 548 题目描述 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长 ...

  9. 字符串函数(strcpy字符串拷,strcmp字符串比较,strstr字符串查找,strDelChar字符串删除字符,strrev字符串反序,memmove拷贝内存块,strlen字符串长度)

    1.strcpy字符串拷贝拷贝pStrSource到pStrDest,并返回pStrDest地址(源和目标位置重叠情况除外) char *strcpy(char *pStrDest, const ch ...

  10. 宽字符与Unicode (c语言 汉语字符串长度)

    在C语言中,我们使用char来定义字符,占用一个字节,最多只能表示128个字符,也就是ASCII码中的字符.计算机起源于美国,char 可以表示所有的英文字符,在以英语为母语的国家完全没有问题. 但是 ...

随机推荐

  1. 源码解析之为何要用ConcurrentHashMap

    为什么要用ConcurrentHashMap? ConcurrentHashMap是JUC包下的一个线程安全的HashMap类,我们都知道多线程的场景下要用ConcurrentHashMap来代替Ha ...

  2. 玄机蓝队靶场_应急响应_02:apache日志分析

    日志分析这块,感觉都是对grep.awk.sort.wc.uniq,这几个命令的使用. 一:靶场 (1)直接cd到linux日志, cd /var/log 发现apache2目录, cd ./apac ...

  3. Apache HTTP Server 使用

    安装 macOS: brew install apache2 Ubuntu: sudo apt install apache2 使用 配置文件路径: macOS: /opt/homebrew/etc/ ...

  4. sipp模拟uas发送update

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 但是fs在处理update消息时候有BUG,为了复现问题,使用sipp模拟uas,发送update并发送DTMF码. 本文档记录si ...

  5. 【题目全解】ACGO挑战赛#8

    前言:本次挑战赛的难度相较于前面几期有所提升,主要还是因为集训的关系,出题组的成员们没有充裕的时间想原创题目(so,只能原模原样搬运某一场 ABC 的考试了.)Anyway,AK 了就行. 备注:由于 ...

  6. sicp每日一题[1.41]

    Exercise 1.41 Define a procedure double that takes a procedure of one argument as argument and retur ...

  7. 小tips:CSS3中的background-clip属性(背景的裁剪区域)

    CSS3中的background-clip属性,其主要是用来确定背景的裁剪区域,换句话说,就是如何控制元素背景显示区域. 语法如下: background-clip : border-box || p ...

  8. 小tips:HTML的实体

    为了能在HTML文档中正确显示某些特殊字符,就需要使用HTML实体(entity).HTML实体就是对当前文档的编码方式不能包含的字符,提供一种转义表示. HTML实体定义 1.名称方式 名称方式会以 ...

  9. EF Core – 继承 Inheritance

    前言 继承是面向对象里的概念. 关系数据库只有一对一, 一对多这类关系, 并没有 "继承" 关系的概念. 所以 ORM (Object–relational mapping) 就需 ...

  10. CSS – border-radius (Rounded Corners)

    前言 之前的文章 CSS – W3Schools 学习笔记 (3), 这篇独立出来写, 作为整理. 参考: Youtube – Advanced CSS Border-Radius Tutorial ...