在一组数中任意位插入或删除某一位

本文介绍了一种在数组中特定位置插入和删除元素的方法。首先通过一个函数计算数组的当前长度,然后根据用户输入的位置进行元素的移动。插入操作会将指定位置后的元素依次后移并插入新值;删除操作则将指定位置后的元素前移覆盖被删除的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在任意位插入一个函数:

(1)先判断内存是否存满;

(2)判断插入位置是否正确(是否超出数组元素的范围);

(3)将插入位之后的元素后移;

 (4)插入数字;
#include <stdio.h>

#define MAX_SIZE 20

int length(int *num)     //求数组长度的函数
{
    int len = 0;
   
    while(*num != 0 )      //遍历数组,计算其元素个数
    {
        len++;
        num++;
    }

    return len;
}

int *Insert_List(int *num ,int i,int x)   //插入函数入口
{
    int k;
    int len;

    len = length(num);

    if(len == MAX_SIZE)        //判断内存是否已满
    {
        printf("error!\n");
    }

    if(i < 1 || i > len + 1)        //判断插入位置否正确
    {
        printf("error!\n");
    }

    if(i <= len)                 //将插入位置后的元素向后移位
    {
        for(k = len ; k > i - 1 ; k--)
        {
            num[k + 1] = num[k];
        }
    }

    num[i - 1] = x;       //将数值插入指定位

    return num;

}

int main()
{
    int i;
    int j;      //循环变量
    int x;

    int num[MAX_SIZE] = {1,2,3,4,5,6,7,8,9};
    int len = length(num);

    printf("len = %d \n",length(num));

    for(j = 0 ; j < len ; j++)      //输出数组的各个元素
    {
        printf("num[%d] = %d \n",j,num[j]);
    }

    printf("please input insert space.");
    scanf("%d",&i);

    printf("please input insert num.");
    scanf("%d",&x);

    Insert_List(num,i,x);

    for(j = 0 ; j < len ; j++)
    {
        printf("num[%d] = %d\n",j,num[j]);
    }

    printf("len = %d\n",length(num));

    return 0;
}

 

 

#include <stdio.h>

#define MAX_SIZE 20

int length(int *num)
{
    int len = 0;

    while(*num != 0)
    {
        len++;
        num++;
    }

    return len;
}

int *Delete_LinkList(int *num,int i)
{
    int len = length(num);

    if(len = MAX_SIZE)
    {
        printf("error! \n");
    }

    if(i < 1 || i > len)
    {
        printf("error! \n");
    }

    if(i <= len)
    {
        for( ; i < len ; i++)
        {
            num[i - 1] = num[i];
        }
    }

    return num;
}

int main()
{
    int i;
    int j;

    int num[MAX_SIZE] = {1,2,3,4,5,6,7,8,9};

    int len = length(num);

    for(j = 0 ; j < len ; j++)
    {
        printf("num[%d] = %d \n",j,num[j]);
    }

    printf("please input delete space.\n");
    scanf("%d",&i);

    Delete_LinkList(num,i);

    for(j = 0 ; j < len ; j++)
    {
        printf("num[%d] = %d \n",j,num[j]);
    }

    printf("len = %d \n",length(num));

    return 0;
}

 


 

<think>好的,我需要帮用户写个能在网页任意输入框插入20随机字的插件。首先,得确定用户的需求:他们想要个浏览器插件,当激活时,可以在当前聚焦的输入框中自动插入20的随机字。这可能用于测试表单、模拟据输入等场景。 接下来,考虑技术实现。浏览器插件通常可以使用JavaScript编写,支持Chrome、Firefox等主流浏览器。插件的核心功能包括:检测当前聚焦的输入框,生成20随机字,并将插入到输入框中。 第步,生成20随机。JavaScript中可以用Math.random()生成随机,但需要确保是20。不过,Math.random()返回的是0到1之间的浮点,直接处理可能不够。可以采用循环生成每字,拼接成字符串。例如,循环20次,每次生成0-9的随机整数,然后拼接。 然后,检测当前聚焦的输入框。通过document.activeElement可以获取当前获得焦点的元素。需要判断该元素是否是输入框(input、textarea等)。如果是,就插入生成的字。 接下来,插件的触发方式。用户可能需要通过右键菜单、快捷键插件图标点击来触发。这里选择右键菜单和快捷键组合,因为这样用户操作起来比较方便。 编写插件的结构。需要manifest文件(manifest.json)声明权限和配置。例如,需要"activeTab"权限来访问当前标签页,以及"contextMenus"来添加右键菜单。此外,注册后台脚本(background.js)处理右键菜单的点击事件,内容脚本(content.js)执行插入操作。 在content.js中,监听快捷键事件,比如Ctrl+Shift+1(Mac的Command键),当按下时执行插入。同时,右键菜单项被点击时,向当前标签页发送消息,触发内容脚本的操作。 测试各个部分是否正常工作。生成20字是否正确,能否正确插入到不同类型的输入框中,快捷键和右键菜单是否触发。可能需要处理不同网站的安全策略,但般现代网站使用content脚本应该可行。 最后,打包插件,提供安装说明。用户需要加载未打包的扩展程序,者发布到商店。 潜在问题:某些输入框可能有输入限制(如最大长度),插件插入20可能导致超出限制。但用户需求明确是20,所以可能不需要处理。另外,生成的字是否包含前导零?根据需求,20字可以是0-9的任意组合,所以允许前导零。 总结步骤: 1. 创建manifest.json配置插件基本信息、权限和脚本。 2. 编写background.js注册右键菜单和快捷键监听。 3. 编写content.js处理插入逻辑。 4. 测试功能,确保在不同输入框下正常工作。 5. 打包并提供使用说明。</think>以下是为您编写的浏览器插件实现方案,可在网页任意输入框插入20随机字: ### 、插件核心代码结构 ```text random-number-extension/ ├── manifest.json # 插件配置文件 ├── background.js # 后台脚本 └── content.js # 内容脚本 ``` ### 二、代码实现 1. **manifest.json 配置文件** ```json { "manifest_version": 3, "name": "随机插入器", "version": "1.0", "permissions": ["activeTab", "scripting", "contextMenus"], "background": { "service_worker": "background.js" }, "action": { "default_icon": { "16": "icon16.png" } }, "commands": { "insert-number": { "suggested_key": { "default": "Ctrl+Shift+1", "mac": "Command+Shift+1" }, "description": "插入随机字" } } } ``` 2. **background.js 后台脚本** ```javascript // 创建右键菜单 chrome.runtime.onInstalled.addListener(() => { chrome.contextMenus.create({ id: "insertRandom", title: "插入20随机", contexts: ["editable"] }); }); // 监听菜单点击 chrome.contextMenus.onClicked.addListener((info, tab) => { if (info.menuItemId === "insertRandom") { chrome.scripting.executeScript({ target: { tabId: tab.id }, files: ['content.js'] }); } }); // 监听快捷键 chrome.commands.onCommand.addListener((command) => { if (command === "insert-number") { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { chrome.scripting.executeScript({ target: { tabId: tabs[0].id }, files: ['content.js'] }); }); } }); ``` 3. **content.js 内容脚本** ```javascript // 生成20随机字函 function generate20DigitNumber() { let result = ''; for (let i = 0; i < 20; i++) { result += Math.floor(Math.random() * 10); // 生成0-9随机 } return result; } // 插入到输入框 function insertRandomNumber() { const activeElement = document.activeElement; const validInputTypes = ['text', 'number', 'password', 'tel', 'search']; if (validInputTypes.includes(activeElement.type) || activeElement.tagName === 'TEXTAREA') { const randomNum = generate20DigitNumber(); activeElement.value = randomNum; // 触发输入事件更新 const event = new Event('input', { bubbles: true }); activeElement.dispatchEvent(event); } } // 执行插入操作 insertRandomNumber(); ``` ### 三、使用方式 1. **快捷键操作**: - Windows/Linux: `Ctrl + Shift + 1` - Mac: `Command + Shift + 1` 2. **右键菜单**: - 在任意输入框右键点击 → 选择"插入20随机" ### 四、技术特点 1. 安全合规:使用Manifest V3规范,符合最新浏览器安全要求 2. 兼容性强:支持所有标准HTML输入框类型(text/number/tel/search等) 3. 即时更新:通过触发input事件确保据绑定框架能捕获变化 4. 智能检测:自动识别当前聚焦的输入元素类型 ### 五、安装步骤 1. 将上述代码保存为文件结构 2. 打开Chrome浏览器 → 访问 `chrome://extensions` 3. 开启"开发者模式" 4. 点击"加载已解压的扩展程序" → 选择插件目录 ### 六、注意事项 1. 部分网站可能通过JavaScript禁用输入框修改,此时插件可能失效 2. 如需生成可重复的随机序列,可修改`generate20DigitNumber`函加入种子参 3. 最大支持输入长度取决于目标输入框的maxlength属性设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值