首页 > 其他分享 >C 语言代码

C 语言代码

时间:2023-10-06 17:32:14浏览次数:40  
标签:语言 代码 length result str 字符串 MyString string

以下是一个较为复杂的 C 语言代码示例,展示了如何使用指针和动态内存分配来实现一个简单的字符串操作库:

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

// 自定义字符串结构体
typedef struct {
    char* str;
    int length;
} MyString;

// 创建字符串
MyString* createString(const char* source) {
    MyString* string = malloc(sizeof(MyString));
    
    string->length = strlen(source);
    string->str = malloc((string->length + 1) * sizeof(char));
    strcpy(string->str, source);
    
    return string;
}

// 字符串连接
MyString* concatenateString(const MyString* str1, const MyString* str2) {
    MyString* result = malloc(sizeof(MyString));
    
    result->length = str1->length + str2->length;
    result->str = malloc((result->length + 1) * sizeof(char));
    
    strcpy(result->str, str1->str);
    strcat(result->str, str2->str);
    
    return result;
}

// 字符串复制
void copyString(MyString* dest, const MyString* src) {
    dest->length = src->length;
    dest->str = realloc(dest->str, (dest->length + 1) * sizeof(char));
    
    strcpy(dest->str, src->str);
}

// 销毁字符串
void destroyString(MyString* string) {
    free(string->str);
    free(string);
}

int main() {
    MyString* str1 = createString("Hello");
    MyString* str2 = createString("World!");
    
    MyString* concatenated = concatenateString(str1, str2);
    printf("连接后的字符串为: %s\n", concatenated->str);
    
    MyString* copied = malloc(sizeof(MyString));
    copyString(copied, concatenated);
    printf("复制后的字符串为: %s\n", copied->str);
    
    destroyString(str1);
    destroyString(str2);
    destroyString(concatenated);
    destroyString(copied);
    
    return 0;
}

上述代码中,我们定义了一个自定义字符串结构体 MyString,它包含一个字符指针 str 来存储字符串内容,以及一个整型变量 length 来记录字符串的长度。我们实现了以下几个字符串操作函数:

  • createString:用于创建一个新的字符串对象,并将字符串内容复制到动态分配的内存中。
  • concatenateString:用于将两个字符串连接起来,并返回一个新的字符串对象。
  • copyString:用于将一个字符串复制到另一个字符串对象中。
  • destroyString:用于销毁字符串对象,并释放相关的内存。

main 函数中,我们创建了两个字符串对象 str1str2,对它们进行了连接和复制操作,并打印了结果。最后,我们释放了所分配的内存,避免内存泄漏。

请注意,这只是一个相对复杂的示例代码,演示了如何使用指针和动态内存分配来操作字符串。在实际编写代码时,应根据具体需求选择合适的字符串处理库或者使用已有的标准库函数来处理字符串。

标签:语言,代码,length,result,str,字符串,MyString,string
From: https://blog.51cto.com/u_15964895/7726233

相关文章

  • 社交媒体平台代码例题
    Go语言代码示例,用于实现一个简单的社交媒体平台:packagemainimport( "fmt" "strings" "time")typeUserstruct{ IDint Usernamestring Emailstring Followers[]int}typePoststruct{ IDint Contentstring Time......
  • springboot中的代码生成器
    springboot可以集成MyBatis-Plus代码生成器,如何想要快速开发或者考试可以试用一下。我参看下面这篇博客弄的:Mybatis-Plus自动生成代码,自定义Controller_mybatisplus生成controller-CSDN博客有些好用 ......
  • C语言阶乘for循环语句的使用
    #include<stdio.h>intmain(){inti=0,n=0;ret=1;scanf_s("%d",&n);//scanf_s作用是避免在编译器中出现不安全影响代码编译 for(i=1;i<=n;i++)   { ret=ret*i;    } printf("%d\n",ret); return0;}用于输入n的阶乘利用for语句解决求1~10阶乘的......
  • C语言求1~n的阶乘的和的进阶优化
    #include<stdio.h>intmain(){ intret=1; intsum=0; intn=0;for(n=1;n<=10;n++)//10可以变成任意值 { ret=ret*n; sum=sum+ret; } printf("%d",sum); return0;}......
  • 实验1 C语言输入输出和简单程序编写
    一1_1.c1#include<stdio.h>23intmain()4{5printf("o\n");6printf("<H>\n");7printf("II\n");8printf("o\n");9printf("<H>\n");10......
  • 实验1 C语言输入输出和简单程序编写
    实验1实验1-11//打印一个字符小人23#include<stdio.h>4intmain()5{6printf("O\n");7printf("<H>\n");8printf("II\n");9printf("O\n");10printf("<H>\......
  • 如何选购一台适合写代码的笔记本电脑
    如何选购一台适合写代码的笔记本电脑 1.参考指标选择一台写代码的笔记本,其实是很好选择的。不像是选择游戏本,各个指标的性能必须拉满,因为写代码不吃显卡,这块预算可以直接砍掉,用集成显卡就完全可以,把这部分的钱换成别的配置,那么写代码的体验就可以起飞了。下面我讲......
  • Eclipse修改代码以及菜单字体大小
    (1)首先找到菜单栏的窗口(Windows)选项,然后点开,再点击首选项(preferences)(2)然后点击常规(General),然后找到外观(Appearence),然后找到颜色和字体(ColorsandFonts)(3)然后找到基本(Basic),然后点击标题字体,再然后点击编辑,选择自己想要的大小二:更改Java字体找到Java,然后修改字体大小,......
  • app直播源代码,JavaWeb如何设置定时任务
    app直播源代码,JavaWeb如何设置定时任务1.在xml文件中添加监听器 <?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • 归并排序原理、演示及代码
    归并排序1.原理归并排序是一种排序算法,它通过将待排序的数组或列表递归分割成较小的子数组,然后将这些子数组合并以生成一个有序的数组。2.操作分割(Divide):将待排序的数组分成两个大致相等的子数组,或者将列表分成两部分。这个过程是递归的,直到每个子数组或子列表都只包含一个元......