C语言—字符数组(3)

可能不是那么的完整,先凑合看吧,如果我学会如何修改以后,我慢慢回来修改的

1.编写程序实现对两个字符串的连接功能;

法一:不使用strcat函数,写程序直接实现,记得添加结束符,不然程序访问数组时候将变得不可预测

cs 复制代码
/*1.编写程序实现对两个字符串的连接功能*/

#include <stdio.h>

int main(void)
{
    char str1[] = "hello,";
    char str2[] = "world!";
    char str[100] = {0};  //用于存储连接后的字符串

    printf("字符串1: %2s 字符串2: %2s\n",str1,str2);

    int index1 = 0; //初始化下标

    while(str1[index1] != '\0')  //复制str1到str
    {
        str[index1] = str1[index1];
        index1++;
    }

    int index2 = 0;
    while(str2[index2] != '\0')  //复制str2到str
    {
        str[index1] = str2[index2];
        index1++;
        index2++;
    }

    str[index1] = '\0';  //在连接后的字符串末尾添加字符串结束符

    printf("连接后的字符串: %s\n",str);

    return 0;
}

法二:使用strcat函数

cs 复制代码
/*1.编写程序实现对两个字符串的连接功能,使用strcat函数*/

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

int main(void)
{
    char str[32] = {0};  //存储连接后的字符串
    char str1[] = "hello,";
    char str2[] = "world!";

    printf("连接之前字符串1: %2s 字符串2: %2s\n",str1,str2);


    strcat(str,str1);  //strcat函数连接字符串1和字符串2
    strcat(str,str2);

    printf("连接后的字符串是: %s\n",str);

    return 0;

}

2.编写程序实现对字符串有效数据长度的计算;

法一:不用strlen函数

cs 复制代码
*2.编写程序实现对字符串有效数据长度的计算;*/

#include <stdio.h>

int main(void)
{
    char str[8];
    unsigned int len = 0;

    printf("请输入一个字符串:");
    fgets(str,sizeof(str),stdin);

    while(str[len] != '\0')  //遇到结束符停止循环
    {
        len++;  //若未遇到结束符则增加有效数据长度
    }

    //屏蔽这里为还不是很懂,fgets()函数会自动添加结束符,我想添加判断语句却不行`
    /*if(len > 7)
    {
        printf("输入字符串太长,请重新输入。\n");
    }*/

    printf("字符串中有效数据长度为: %u\n",len - 1); //减去结束符就是长度

    return 0;
}

法二:strlen函数

cs 复制代码
/*strlen函数*/

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

int main(void)
{
    char str[8];
    unsigned int len;

    printf("请输入一个字符串:");
    fgets(str,sizeof(str),stdin);

    len = strlen(str) - 1;

    printf("输入的有效的字符串长度是: %u\n",len);

    return 0;

}

3.编程实现随机输出多个字符串中的某个;

cs 复制代码
/*3.编程实现随机输出多个字符串中的某个;*/

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

#define r 3
#define l 32

int main(void)
{
    char arr[r][l] = {
                        "hello",
                        "Spring Festival",
                        "Happy New Year"

                     };

    srand(time(NULL)); //生成种子数

    int randow;
    randow = rand() % r;  //随机生成选中的字符串的数字放入randow变量中

    printf("随机选中的字符串是: %s\n",arr[randow]);

    return 0;
}

思考题:
计算字符串中所有数字的和
字符串"123abd23ee1"==>123 + 23 + 1 = 147

划重点讲解:积累字符串变数组的小算法

cs 复制代码
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[64] = {0};
    printf("请输入一个字符串:");
    scanf("%s",str);
    
    int num = 0; // 初始化一个变量来存储连续数字的值
    int sum = 0; // 初始化一个变量来存储所有数字的和
    
    for (int i = 0; str[i] != '\0'; i++) // 循环遍历字符串中的每个字符
    {
        if (str[i] >= '0' && str[i] <= '9') // 如果字符是数字
        {
            num = num * 10 + (str[i] - '0'); // 将数字字符转换为数字并累加到num
        }
        else
        {
		    sum += num;
		    num = 0;  //num清零处理再进入循环
        }
    }

	sum += num;  //加上最后一个数字,因为最后一个为数字的话,后面空字符将无法进入for循环

    printf("字符串中数字总和为: %d\n", sum); // 打印字符串中数字的总和

    return 0;
cs 复制代码
#include <stdio.h>
#include <string.h> 

int main(void)
{
    char str[] = "123abd23ee1"; // 定义一个字符数组,并初始化为给定的字符串
    printf("字符串为: %s\n",str); // 打印输入的字符串

    int sum = 0; // 定义一个变量来存储数字的和
    int num = 0; // 定义一个变量来存储当前数字的值
    int i = 0; // 定义一个索引变量,用于遍历字符串

    while(str[i] != '\0') // 当字符串结束符之前,循环继续
    {
        if(str[i] >= '0' && str[i] <= '9') // 如果数组中遍历到数字将进行此循环
        {
            num = num * 10 + (str[i] - '0'); // 将当前数字乘以10,然后加上字符转换为的数字,也就是2个数字变十位,3个数字变百位...
        }
        else // 如果是字符不是数字进行存储累加
        {
            sum += num; // 将当前数字的和加到总和中
            num = 0; // 将当前数字重置为0
        }
    }

    sum += num; // 将最后一个数字加到总和中

    printf("字符串中所有数字的和为: %d\n",sum); // 打印字符串中所有数字的和

    return 0;
}

这个写完就进入函数啦,嘿嘿

相关推荐
争不过朝夕,又念着往昔14 分钟前
即时通讯项目---网关服务
linux·c++·vscode
蓝风破云25 分钟前
C++实现常见的排序算法
数据结构·c++·算法·排序算法·visual studio
时空自由民.26 分钟前
linux下camera 详细驱动流程 OV02K10为例(chatgpt版本)
linux·运维·服务器
码界奇点34 分钟前
Python内置函数全解析:30个核心函数语法、案例与最佳实践指南
linux·服务器·python
The_Second_Coming36 分钟前
Linux 学习笔记 - 集群管理篇
linux·笔记·学习
ChuHsiang39 分钟前
【Linux系统编程】日积月累——进程(2)
linux
艾醒1 小时前
大模型面试题剖析:Pre-Norm与Post-Norm的对比及当代大模型选择Pre-Norm的原因
算法
怀旧,1 小时前
【C++】 9. vector
java·c++·算法
shylyly_2 小时前
Linux->多线程2
java·linux·多线程·线程安全·线程同步·线程互斥·可重入
浩浩测试一下2 小时前
06高级语言逻辑结构到汇编语言之逻辑结构转换 for (...; ...; ...)
汇编·数据结构·算法·安全·web安全·网络安全·安全架构