芒果芭乐 2024-06-18 15:15 采纳率: 90.2%
浏览 2

怎么根据要求选中字符串中的数字字符

img


怎么根据题设要求选中字符串中的数字字符呢?


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_LEN 80

void extractNum(char * str);

int main()
{
    char str[MAX_LEN];
    gets(str);
    extractNum(str);
    puts(str);
    return 0;
}
// 函数extractNum:选出str指向的字符串中的数字,并写回str
// 参数:str-指向字符串
void extractNum(char * str)
{
 // 请在此添加代码,实现函数extractNum
    /********** Begin *********/
   
    /********** End **********/
}

补全上述代码

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-18 15:16
    关注

    引自免费微信小程序:皆我百晓生

    为了完成这个任务,我们需要遍历整个字符串,检查每个字符是否为数字或负号,并且确保在数字序列前只有一个负号被保留。以下是完整的C语言代码实现:

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    #define MAX_LEN 80
    
    void extractNum(char * str);
    
    int main() {
        char str[MAX_LEN];
        fgets(str, MAX_LEN, stdin); // 使用fgets替代gets以避免安全问题
        extractNum(str);
        puts(str);
        return 0;
    }
    
    // 函数extractNum:选出str指向的字符串中的数字,并写回str
    // 参数:str-指向字符串
    void extractNum(char * str) {
        int len = strlen(str);
        int writePos = 0; // 写入位置
        int hasNegative = 0; // 是否已经遇到负号
        for (int readPos = 0; readPos < len; readPos++) {
            if (isdigit(str[readPos]) || (!hasNegative && str[readPos] == '-')) {
                if (str[readPos] == '-') {
                    hasNegative = 1;
                }
                str[writePos++] = str[readPos];
            }
        }
        str[writePos] = '\0'; // 确保字符串以空字符结束
    }
    

    在这个代码中,extractNum函数接收一个字符数组str作为参数。它首先获取字符串的长度,然后定义两个指针:readPos用于读取字符串中的字符,writePos用于在原字符串中写入数字和负号。hasNegative变量用于跟踪是否已经遇到过负号。

    遍历过程中,如果遇到数字或(尚未遇到负号并且当前字符是负号),则将该字符复制到writePos位置,并将writePos递增。当遇到负号时,设置hasNegative为1,以确保后续数字前不再加入额外的负号。

    最后,通过在writePos位置添加一个空字符来终止新构建的字符串,确保其仍然是一个有效的C字符串。这样,extractNum函数就完成了从原始字符串中提取数字和可能的一个负号的任务。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月18日

悬赏问题

  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住