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;
}

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

相关推荐
ulias2121 小时前
Linux系统中的权限问题
linux·运维·服务器
2301_764441332 小时前
LISA时空跃迁分析,地理时空分析
数据结构·python·算法
东北洗浴王子讲AI2 小时前
GPT-5.4辅助算法设计与优化:从理论到实践的系统方法
人工智能·gpt·算法·chatgpt
mzhan0173 小时前
Linux: lock: preempt_count 是一个线程级别的变量
linux·lock
Billlly3 小时前
ABC 453 个人题解
算法·题解·atcoder
玉树临风ives3 小时前
atcoder ABC 452 题解
数据结构·算法
Dream of maid3 小时前
Linux(下)
linux·运维·服务器
齐鲁大虾3 小时前
统信系统UOS常用命令集
linux·运维·服务器
feifeigo1234 小时前
基于马尔可夫随机场模型的SAR图像变化检测源码实现
算法
weixin_446023564 小时前
C语言:面向过程、应用底层开发、跨平台的通用程序设计语言
c语言·跨平台·数据类型·底层开发·面向过程