7-13 字符转换 (15 分)

本文指导初学者理解如何使用Java提取字符串中的数字字符,并转换为整数。讲解了从字符数组逆序计算、ASCII码转换和进位累加的方法,同时提供了一段代码实例,并针对代码进行了优化建议。

本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。

输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。

输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。

输入样例:

free82jeep5

输出样例:

825

代码部分:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		try (// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in)) {
			String str = new String();
			str = in.nextLine();
			
			int[] a = new int[80];
			int count = 0;
			
			int i;
			for(i=0;i<str.length();i++)    //取出字符串中的数字,存入数组中
			{
				if(str.charAt(i)>=48 && str.charAt(i)<=57)
				{
					a[count] = str.charAt(i);
					count++;    //实际数字应存到count-1,a[count]中未存数据
				}
			}
			
			int sum=0;
			int mult=1;    //10的n次方
			for(i=count-1;i>=0;i--)    //从低位算起
			{
				a[i] = a[i] - 48;    //此时a[i]中的数据均为ASCII码的形式,要将其(数字)转化为对应十进制,应减去48  ps:ASCII码中48-57对应十进制0-9
				sum = sum + a[i]*mult;
				mult = mult * 10;
			}
			System.out.println(sum);
			in.close();
		}
	}

}

本题思路:
① 将字符串中的数字部分( ASCII码位于48 - 57之间 )取出,依次存入数组。
② 将数组中元素逆序取出,乘以mult( mult为10的n次方 ),并进行累加,即可将字符转换为对应整数。

java刚入门小白,如有错误或优化欢迎大佬们的指点!

下面是对“输出三角形字符阵列”这一题目的完整解答。这类题目通常出现在程序设计练习中(如PTA、洛谷等),要求按特定格式输出由字符组成的三角形阵列。 --- ### 题目描述(模拟常见版本): 输入一个大写字母 `ch`,表示起始字符,要求输出一个字符三角形阵列。例如,当输入 `'E'` 时,输出如下: ``` A BC DEF GHIJ KLMNO ``` 即:第 i 行有 i 个连续的大写字母,从 A 开始依次递增,按行输出,形成一个直角三角形。 > 注意:字母是循环使用的吗?一般不循环,假设输入的字母足够小(比如 ≤ 'Z'),保证不会超过 Z。 我们假设输入的字符在 'A' 到 'Z' 之间,并且能构成完整的三角形(比如输入 'E',则最多需要前 5 行,共 1+2+3+4+5=15 个字母,从 A 开始取 15 个字母即可)。 --- ### 解决方案(Python 实现) ```python ch = input().strip() n = ord(ch) - ord('A') + 1 # 计算需要多少行 current_char = 0 # 当前字符偏移量,0 表示 'A' for i in range(1, n + 1): row = "" for j in range(i): row += chr(ord('A') + current_char) current_char += 1 print(row) ``` --- ### 代码解释: - `ord(ch) - ord('A') + 1`:将输入字符转换为对应的行数。例如 `'E' -> 69-65+1 = 5`,所以输出 5 行。 - `current_char` 是一个计数器,记录当前应该输出的是从 `'A'` 开始的第几个字母。 - 外层循环控制行数 `i` 从 1 到 `n`。 - 内层循环控制每行输出 `i` 个字符。 - `chr(ord('A') + current_char)` 将数字转回对应大写字母。 - 每次使用后 `current_char++`,保持连续。 - 构造完一行后打印。 --- ### 示例运行: 输入: ``` D ``` 输出: ``` A BC DEF GHIJ ``` 说明:共 4 行,总共用了 1+2+3+4=10 个字母(A 到 J)。 --- ### 边界考虑: - 如果输入是 `'A'`,则只输出一行:`A` - 字母到 `'Z'` 为止,若总字符数超过 26(比如输入 `'Z'`,需要 26 行,总字符数为 351),会越界。 - 若题目不允许越界,则应限制输入范围或做模运算(但通常题目保证合法输入)。 --- ### 增强版(安全判断是否超 'Z'): ```python ch = input().strip() n = ord(ch) - ord('A') + 1 total_chars = n * (n + 1) // 2 if total_chars > 26: print("Error: Not enough letters!") else: current_char = 0 for i in range(1, n + 1): row = "" for j in range(i): row += chr(ord('A') + current_char) current_char += 1 print(row) ``` --- ### 相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值