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 小时前
蓝桥杯21247弹跳鞋java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
jimy114 小时前
Linux动态加载器,loader,dynamic linker
linux·运维·服务器
kongba00714 小时前
ttyd Web终端安装指南(OpenCloudOS 9)
linux·前端
lolo大魔王14 小时前
Linux 文件权限超详细详解(读懂权限标识、数字权限、特殊权限、chmod/chown)
linux·运维·服务器
SoftLipaRZC14 小时前
C语言数据在内存中的存储:整型与浮点型的秘密
c语言·开发语言
jghhh0114 小时前
基于 Weiler-Atherton 算法的多边形裁剪程序实现
算法
不爱吃糖の糖糖14 小时前
RAG 04:向量数据库与索引算法
数据库·算法
MegaDataFlowers14 小时前
226.翻转二叉树
算法
社交怪人14 小时前
【2的幂】信息学奥赛一本通C语言解法(题号1037)
c语言
月夜的风吹雨14 小时前
Linux 基础开发工具详解:从 yum 到 gdb 实战指南
linux·git·ubuntu·centos·vim