5.输入一个字符串,过滤掉所有的非数字字符并把其存储到一个新的字符数组中。gets,puts函数的解释,isdigit函数的使用及实现。(五月测试)

输入一个字符串到数组名为a的数组中,过滤掉所有的非数字字符并把其存储到一个新的字符数组digit中,输出由数字字符组成的字符串。

先上答案

#include<stdio.h>
#include<ctype.h>

int main()
{
	char a[100] = { 0 };
	char digit[100] = { 0 };
	int i;
	int j = 0;

	gets(a);

	for (i = 0; a[i] != '\0';i++)
	{
		if (isdigit(a[i]))
		{
			digit[j] = a[i];
			j++;
		}
	}

	puts(digit);

	return 0;
}

注意:数组需要初始化。(不初始化可能导致不可预测的结果。 在使用变量之前,始终应初始化变量。)

第一步:

        我们要学会gets和puts这两个输入输出函数

gets

可以看到他的函数原型的参数是字符型的指针,所以常用于字符串的输入。与scanf("%s",数组名)相似,但要记住gets仅仅可以用来作为“char”型的字符输入,也同样需要考虑输入结束时敲下空格也占用一个空间,使用时要注意数组溢出的问题。

扩展:

如图所示:如果gets成功,返回值为输入的参数;

                   如果失败用NULL来表示,用ferrorfeof来区分是哪一种错误。

feof:当文件读取结束时,判断是不是遇到文件末尾才结束的。

ferror:当文件读取结束时,判断是不是遇到错误才读取结束的。
                                                                                                

                                                                                                          (学文件操作的时候会学到)

优点:

他可以接收空格,Tab键,碰到回车输入才结束。

让代码更加简洁且缓冲区不会遗留' \n '

puts

与puts同理,参数是地址或者字符串

注意:puts打印结束后自动换行。

扩展:

如图所示,成功返回一个非负值;失败返回则EOF;

puts函数将字符串写入标准输出流stdout,用输出流中的换行符替换字符串的结束空字符。

isdigit

isdigit是C语言中的一个函数(课本中有表述过)头文件为

#include<ctype.h>

c++中为

#include<cctype.h>

第二步:

             哒哒哒的敲出来

忘了有这个函数也问题不大,继续往下看

PLUS(自己写函数):
#include<stdio.h>

int my_isdigit(int c)
{
	if ((c >= '0' && c <= '9'))
	{
		return c;
	}

	return 0;
}


int main()
{
	char a[100] = { 0 };
	char digit[100] = { 0 };
	int i;
	int j = 0;

	gets(a);

	for (i = 0; a[i] != '\0';i++)
	{
		if (my_isdigit(a[i]))
		{
			digit[j] = a[i];
			j++;
		}
	}

	puts(digit);

	return 0;
}

相信聪明的你一定可以!

endl

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的MIPS汇编程序,它从键盘读取输入字符串,并将其数字分割出来,然后存储到一个数组。 ``` .data input: .space 256 # 输入字符串的缓冲区 digits: .space 64 # 存储数字数组 .text .globl main main: # 读取输入字符串 li $v0, 8 # 系统调用代码 8 表示读取字符串 la $a0, input # 输入字符串的缓冲区地址 li $a1, 256 # 缓冲区大小为 256 字节 syscall # 处理字符串数字 la $t0, input # $t0 指向输入字符串的起始地址 la $t1, digits # $t1 指向数字数组的起始地址 li $t2, 0 # $t2 记录数字的个数,初始为 0 .loop: lb $t3, ($t0) # 读取一个字符 beq $t3, 0, .done # 如果读到字符串末尾则退出循环 # 判断是否是数字 li $t4, '0' # $t4 = 48 blt $t3, $t4, .next # 如果不是数字则跳过 li $t4, '9' # $t4 = 57 bgt $t3, $t4, .next # 如果不是数字则跳过 # 将数字存储数组 sub $t3, $t3, $t4 # $t3 = $t3 - 48,将字符转换为数字 sb $t3, ($t1) # 存储数字 addi $t1, $t1, 1 # 数组指针加 1 addi $t2, $t2, 1 # 数字个数加 1 .next: addi $t0, $t0, 1 # 字符串指针加 1 j .loop .done: # 输出数字数组的内容 li $v0, 4 # 系统调用代码 4 表示输出字符串 la $a0, digits # 数字数组的起始地址 syscall # 退出程序 li $v0, 10 # 系统调用代码 10 表示退出程序 syscall ``` 该程序使用了以下几个MIPS指令: - `lb`:从内存读取一个字节(8位)。 - `sb`:将一个字节(8位)存储到内存。 - `beq`:如果两个寄存器的值相等,则跳转到指定的标签处。 - `bgt`:如果第一个寄存器的值大于第二个寄存器的值,则跳转到指定的标签处。 - `j`:无条件跳转到指定的标签处。 该程序的基本思路是,使用指针遍历输入字符串的每个字符,判断是否是数字,如果是则将其转换为数字存储数字数组。程序最后输出数字数组的内容。 需要注意的是,该程序只能处理负整数,如果输入字符串包含负号或小数点等其他字符,则需要相应地进行处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值