C语言数组与字符串操作技巧

嵌入式学习——C语言字符数组及其函数 1)用于存放字符型数据的数组称为字符数组。2)在C语言中,字符数组中的一个元素只能存放一个字符。一般形式:1)char 数组名 [常量表达式];一维字符数组2)char 数组名[常量表达式1][常量表达式2];二维字符数组。 阅读详情

C语言数组与字符串操作技巧

在C语言中,数组和字符串是非常重要的基础数据结构,它们在很多编程任务中都扮演着核心角色。通过掌握数组与字符串的操作技巧,能够提高代码的效率和灵活性。尽管C语言在数组和字符串的处理上相对基础,但深入理解它们的用法,对于高效编写程序非常重要。

本文将详细介绍C语言中数组和字符串的常见操作技巧,涉及数组的定义、初始化、传递、排序等操作,同时还将深入探讨如何高效处理字符串,进行拼接、查找、比较等操作。

一、C语言中的数组操作

1. 数组的定义与初始化

在C语言中,数组是一组相同类型元素的集合。定义数组时,需要指定数组的类型和大小。数组可以是静态的,也可以是动态的。对于静态数组,大小是固定的,而动态数组的大小可以在程序运行时确定。

定义与初始化静态数组
#include <stdio.h>

int main() {
    // 定义一个大小为5的整数数组,并初始化
    int arr[5] = {1, 2, 3, 4, 5};

    // 输出数组的元素
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}
定义未初始化的数组

如果没有显式地初始化数组,C语言会将其元素设置为0。

#include <stdio.h>

int main() {
    int arr[5];  // 未初始化,元素值未定义

    // 输出数组的元素,可能会输出垃圾值
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

2. 动态数组

动态数组的大小可以在运行时确定,可以使用 malloc 或 calloc 函数来创建动态数组。

示例:使用 malloc 动态分配数组
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int size = 5;

    // 使用malloc动态分配内存
    arr = (int*)malloc(size * sizeof(int));

    // 检查内存分配是否成功
    if (arr == NULL) {
        printf("内存分配失败\n");
        return -1;
    }

    // 初始化数组
    for (int i = 0; i < size; i++) {
        arr[i] = i * 2;
    }

    // 输出数组元素
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }

    // 释放内存
    free(arr);

    return 0;
}

3. 数组作为函数参数

数组传递到函数时,传递的是数组的指针,因此修改函数中的数组内容会影响到原数组。

示例:数组作为函数参数
#include <stdio.h>

void modifyArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= 2;  // 将每个元素乘以2
    }
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    modifyArray(arr, 5);

    // 输出修改后的数组
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

4. 数组排序

数组排序是常见的数组操作,C语言提供了多种排序算法,常见的包括冒泡排序、选择排序、快速排序等。

示例:冒泡排序
#include <stdio.h>

void bubbleSort(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int arr[5] = {5, 3, 8, 1, 2};

    bubbleSort(arr, 5);

    // 输出排序后的数组
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

二、C语言中的字符串操作

1. 字符串的定义与初始化

在C语言中,字符串是以字符数组的形式存在的。C语言并没有内建的字符串类型,字符串实际是一个字符数组,末尾以空字符 '\0' 结束。

示例:定义和初始化字符串
#include <stdio.h>

int main() {
    // 定义并初始化字符串
    char str[] = "Hello, World!";

    // 输出字符串
    printf("%s\n", str);
    return 0;
}

2. 字符串长度计算

C语言中的 strlen 函数可以计算字符串的长度,但不包括空字符 '\0'。

示例:使用 strlen 计算字符串长度
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";

    // 计算并输出字符串长度
    printf("字符串长度: %zu\n", strlen(str));
    return 0;
}

3. 字符串复制与连接

C语言提供了 strcpy 和 strcat 等函数来进行字符串的复制和连接。

示例:字符串复制与连接
#include <stdio.h>
#include <string.h>

int main() {
    char str1[50] = "Hello";
    char str2[] = " World!";

    // 字符串复制
    strcpy(str1, "Hi");

    // 字符串连接
    strcat(str1, str2);

    // 输出连接后的字符串
    printf("连接后的字符串: %s\n", str1);
    return 0;
}

4. 字符串比较

C语言的 strcmp 函数用于比较两个字符串。如果两个字符串相等,返回0;如果不相等,返回非零值。

示例:字符串比较
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Apple";
    char str2[] = "apple";

    // 比较两个字符串
    int result = strcmp(str1, str2);
    
    if (result == 0) {
        printf("字符串相等\n");
    } else if (result < 0) {
        printf("str1 小于 str2\n");
    } else {
        printf("str1 大于 str2\n");
    }
    
    return 0;
}

5. 字符串查找

strchr 和 strstr 函数用于查找字符串中的字符或子串。

示例:字符串查找
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    
    // 查找字符
    char *ptr = strchr(str, 'o');
    if (ptr) {
        printf("找到字符 'o': %s\n", ptr);
    }

    // 查找子字符串
    ptr = strstr(str, "World");
    if (ptr) {
        printf("找到子字符串 'World': %s\n", ptr);
    }

    return 0;
}

三、数组与字符串的结合使用

1. 数组中存储字符串

C语言的字符串实际是字符数组,数组中存储多个字符串的情况非常常见。数组中的每个元素可以是一个字符数组,表示一个字符串。

示例:数组中存储多个字符串
#include <stdio.h>

int main() {
    // 定义一个数组,存储多个字符串
    char *arr[] = {"Apple", "Banana", "Cherry"};
    
    // 输出数组中的字符串
    for (int i = 0; i < 3; i++) {
        printf("%s\n", arr[i]);
    }

    return 0;
}

2. 字符串数组与二维数组的关系

字符串数组可以看作是二维字符数组,其中每行代表一个字符串。

示例:二维数组存储字符串
#include <stdio.h>

int main() {
    // 定义一个二维数组,存储多个字符串
    char arr[3][10] = {"Apple", "Banana", "Cherry"};
    
    // 输出二维数组中的字符串
    for (int i = 0; i < 3; i++) {
        printf("%s\n", arr[i]);
    }

    return 0;
}

四、常见的数组与字符串操作技巧

1. 字符串逆序

利用数组和字符串操作,我们可以轻松实现字符串的逆序操作。

示例:字符串逆序
#include <stdio.h>
#include <string.h>

void reverseString(char *str) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
}

int main() {
    char str[] = "Hello, World!";
    
    // 输出原字符串
    printf("原字符串: %s\n", str);

    reverseString(str);

    // 输出逆序后的字符串
    printf("逆序后的字符串: %s\n", str);
    return 0;
}

2. 去除字符串中的空格

有时我们需要处理字符串中的空格,例如去除多余的空格,下面是一个去除字符串中空格的示例。

示例:去除空格
#include <stdio.h>
#include <string.h>

void removeSpaces(char *str) {
    int i = 0, j = 0;
    while (str[i]) {
        if (str[i] != ' ') {
            str[j++] = str[i];
        }
        i++;
    }
    str[j] = '\0';
}

int main() {
    char str[] = "Hello  World   !";
    
    printf("原字符串: %s\n", str);

    removeSpaces(str);

    printf("去除空格后的字符串: %s\n", str);
    return 0;
}

五、结语

C语言中的数组和字符串操作是编程中的基础,也是构建复杂应用的基石。通过掌握数组与字符串的操作技巧,程序员能够更加高效地处理数据,优化程序的性能。本文介绍了C语言中常见的数组和字符串操作技巧,并通过具体代码示例展示了如何在实际编程中应用这些技巧。希望这些内容能帮助大家在开发中更加得心应手,提升编程能力。

C语言基础教程(四):数组与字符串完全指南 数组是C语言中最基础且重要的数据结构之一,它为我们提供了组织和存储大量相同类型数据的高效方式。无论是处理学生成绩、矩阵运算还是字符串操作,数组都扮演着不可或缺的角色。本文将全面解析C语言数组的各种特性和使用方法,帮助初学者构建扎实的数据处理能力。 阅读详情

相关推荐

一些C语言惯用法

花了三周时间看完了《C语言程序设计与现代方法》,全书概念讲解细致严谨,知其然的同时更知其所以然。示例程序严整规范,着重培养良好的编程习惯。习题质量平均水准高(每章我选做了部分),而且还提供了讲义和在线资源。无论是对于初学者入门还是老手查漏补缺,这本书都值得拜读,如果时间允许的话,最好也完成所有练习题。 摘录一些常用的C语言惯用法: 1. 忽视这一行剩下的字符 while (getchar() != '\n'); /* skip reset of line */ 2. 变量ch读取getchar()遇到的第

yalongxu的博客 638

c语言字符数组及使用方法

c语言字符串及使用方法一、字符数组和字符串二、字符数组的输入三、字符数组的输出四、C 语言字符串处理函数1、字符串连接函数 strcat() 一、字符数组和字符串 用来存放字符的数组称为字符数组,例如: 1. char a[10]; //一维字符数组 2. char b[5][10]; //二维字符数组 3. char c[20] = { 'c', ' ', 'p', 'r', '...

qq_45930294的博客 4万+

C语言编程技巧:字符串处理与数组操作

本文介绍了一系列C语言中的字符串处理和数组操作技巧。通过具体的代码示例,包括字符串反转、单词计数、最长字符串查找和字符串数组行交换等,展现了如何利用递归、循环和字符串函数来解决实际问题。这些技巧不仅帮助读者理解C语言中字符数组的使用,还涉及到了如何在不使用标准库函数的情况下实现特定功能。

weixin_42504649的博客 495

C语言——字符串数组、整型数组与函数的调用

首先,我们知道在C语言中字符串是以数组的形式储存。例如字符串"Hello world!"是以'H''e''l''l''o'...依次以单字符储存在一个字符数组中char string[12],特别的其中最后一个字符为'\0'。我们已经知道了字符串是以数组的形式储存,在函数调用字符串时,不同于传值赋值,特别的是将数组第一个值的地址传给函数的形式参数,因此需要设指针参数来接收地址。string[0]的地址 'a';2.整形数组的调用方式与上方相同;string[1]的地址 'b'

2302_79410667的博客 597

基于PINN的一个简单的求解偏微分方程实例

本人是做化工模拟的一名学生,最近在学习PINN(Physics-Informed Neural Networks,物理信息神经网络)对管道动力学进行建模研究,PINN由于其对机理与数据的良好兼顾性非常热门,本文是作者对PINN入门研究过程的一个练手小题目,main code也是作者代码是基于pytorch2.6.0写的,发上来供各位参考,欢迎研究管道动力学和PINN的小伙伴一起讨论~

weixin_64491760的博客 1739

4.无限共轭距柯克物镜设计——zemax学习笔记

无限共轭cooker物镜

fly_daerm的博客 1593

C语言--数组总结

C语言 数组学习总结

weixin_58037275的博客 934

新手必看:如何用T265和ROS实现无人机室内精准定位(附PX4参数配置)

本文详细介绍了如何使用Intel Realsense T265和ROS实现无人机室内精准定位,包括硬件准备、ROS数据流架构设计、PX4参数配置及系统验证。特别针对视觉SLAM技术在室内环境中的应用,提供了从零搭建到进阶优化的全流程解析,适合无人机开发新手快速上手。

weixin_30642561的博客 404

字符串和数组常用的方法

字符串常用的方法 字符串的平常的方法,返回的是新的字符串,并不是在字符串上进行更改 String var str = new String() console.log(str) CharAt 调用方法,返回指定下标的字符串 var str = 'hallow world' console.log(str.charAt(2)) //console.log的值为l,就像 ...

weixin_44601570的博客 1566

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程

本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。

k9l0m1的博客 481

AI测试干货:让大语言模型稳定输出 JSON 的四种实现方案

用大语言模型做测试用例生成、数据提取时,最头疼的就是让它老老实实返回 JSON。你以为它会给你 `{"name":"张三"}`,结果它来一句"好的,这是生成结果:```json...",或者干脆在 JSON 里加注释,直接把你的 `json.loads()` 干崩溃。 模型本质上是个话痨,天生爱解释。但我们要的是结构化数据,不是聊天记录。我整理了四种实战方案,从最简单的提示词技巧到工程化框架,覆盖了从快速验证到生产环境的各种场景。

blues_C的博客 955

C语言数组与字符串操作全解析:从基础到进阶,深入掌握数组和字符串处理技巧

C语言作为一门低级语言,提供了强大的内存控制能力,使得开发者能够以更精细的方式操控数据。而数组和字符串作为C语言中的基本数据结构,它们在处理大量数据和文本操作中扮演着至关重要的角色。尽管在现代编程语言中,字符串通常作为内建类型存在,但在C语言中,字符串的处理却显得尤为独特,因为C语言并没有内建字符串类型,字符串是通过字符数组来实现的。理解数组和字符串的操作不仅是掌握C语言的基础,也能帮助我们高效地解决实际编程问题。本文将深入探讨C语言中的数组和字符串。

吴师兄大模型的博客 983

Pytorch实用教程:super(MLP,self).__init__()和super().__init__()有什么区别?

在 Python 中,super()函数用于调用父类(超类)的方法。它的使用在继承关系中非常常见,特别是在初始化继承自父类的属性时。在 PyTorch 中,这通常见于初始化nn.Module类的子类。super()的两种调用方式有微妙的差别,但在 Python 3 中常常用来达到同样的目的。这种写法在 Python 2 中非常常见。这里,super()被调用时需要指定当前类名(MLP)和当前实例(self。

若北辰 1025

C语言:字符串数组与字符串指针数组

1,首先,不论是局部,静态还是全局数组都必须在定义的时候初始化,否则就得通过其他方式,eg 循环操作,字符串处理函数strcpy() 2,附以下代码: 主要完成将”I am from china ”倒置为”china from am I”, 最开始编写时,将str定义为字符串数组,怎么都出不来结果。半天才发现应该用字符串指针数组 3,那么问题来了,字符串数组和字符串指针数组有什么区别 ...

Kobe51920的博客 4万+

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1840

[EdgeAI] NXP eIQ 机器学习Toolkit (一):准备篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。............

HowieXue 薛永浩的博客 1万+

理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串

本期视频点击这里        在前面几次我们接触的数据类型都是简单数据类型,使用一个数据个体表示一个元素。C语言中还提供了多种复杂数据类型,其中最简单的一种就是数组。数组这一结构使用内存中一段连续的内存空间保存一组相同类型的变量,这些变量通过数组的下标/索引的不同相互区分。数组与指针有着十分紧密的联系,通常使用数组下标能实现的操作都可以使用指针完成,而且使用指针的程序通常效率更高。但是指针和数

Workshop of Wenjie.Yin 2140

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

c语言定义一个字符数组将其输出,一个非常简单的返回局部字符数组的C语言程序, 请问其输出结果?...

以下是该无聊的程序:#include #include char* get_str(){int x[10];char str[] = "hello world! long long long long long long long!!!";return str;}int main(){char a[256];char* str = get_str();strcpy(a, str);printf("...

weixin_35994939的博客 313

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C语言核心语法与实战技巧

本文摘要:C语言基础与核心概念总结,涵盖项目结构、数据类型、变量、字符串、输入输出、预处理指令、操作符、分支循环、函数、数组、指针、结构体等关键知识点。重点包括:1)程序组织层级;2)变量作用域与生命周期;3)字符串以\0结尾的特性;4)指针操作与内存管理;5)函数模块化编程;6)调试技巧与高质量编码规范。掌握这些核心内容可提升C语言开发能力,避免常见错误,编写高效可靠的程序。

m0_73845654的博客 864

南昌大学c语言作业答案,南昌大学计算机c语言操作题答案

《南昌大学计算机c语言操作题答案》由会员分享,可在线阅读,更多相关《南昌大学计算机c语言操作题答案(18页珍藏版)》请在金锄头文库上搜索。1、83、以下程序的输出结果是【 】 。main() char s=abcdef;s3=0;printf(%sn,s);教师批改:abc 84、以下程序运行后的输出结果是 【 】 。main() char s =“9876”,*p;for ( p=s ; p#i...

weixin_34837971的博客 422

C语言字符串

始终预留空间给\0:数组长度 ≥ 内容长度+1优先使用带n的安全函数:如strncpysnprintf动态内存用完即释放:配对使用mallocfree区分指针与数组char s[]可修改,char *s指向常量区。

2501_92019824的博客 439

C语言中字符数组的初始化与赋值

C语言中字符串的初始化赋值及其他操作

2Know的博客 10万+

字符串和字符串数组

文章目录字符串字符串输出字符串常用方法计算字符串的长度字符串拼接字符串拷贝字符串比较字符串数组 字符串 用双引号引起来的就是字符串,字符串由字符组成 字符串使用%s格式化输出 字符串以\0结尾,没有\0就不是字符串 只要是用双引号括起来的都是字符串 字符串的本质就是数组 注意: 字符串变量和普通的字符数组有一定的区别,C语言规定,字符串必须以\0结尾(作为字符串的结束符号),所以字符串变量的元素...

张聪的博客 11万+

C语言字符数组基本操作

test 1 #include <stdio.h> 2 3 /* 4 *字符数组倒序 5 */ 6 void daoxu(char str[]){ 7 int i; 8 char temp; 9 for(i = 0; i < strlen(str) / 2 ; i ++){ 10 ...

a278256076的博客 291

C语言小技巧

Q: 如何把一个字符ch添加到一个字符串str的末尾? A: 按照一般方法, 我们可能会用         int len = strlen(str);         str[len] = ch;         str[len + 1] = '\0';    不过我们也可以用strncpy函数来实现这一功能         strncpy(str, &ch, 1); Q: 如

开始淡漠的博客 355

C语言习题:字符串操作函数练习题目

1、将包含字符数字的字符串分开, 使得分开后的字符串前一部分是数字后一部分是字母。例如“h1ell2o3”->”123hello” #include <stdio.h> #include <string.h> #include <ctype.h> void divide_str(char* str1, char* str2); int main() { ...

CLZHIT的博客 2470
上一篇: 虚拟时尚:AIGC驱动的服装设计案例
下一篇: 结构体与联合体:C语言中的高级数据结构
set_one
博客等级 码龄2年 332粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值