将 字 符 串 中 的 空 格 替 换 成 “%020”

该博客展示了如何使用C语言处理空格,并将含有空格的字符串转换为URL编码格式。代码通过读取输入的字符串,计算空格数量,然后分配内存并进行反转处理,将每个空格替换为'%20'。最后,打印出处理后的字符串并释放内存。

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 512


int main() {
	char s[maxn] = { 0 };
	char *p;
	int i=0,j=0,count = 0;
	while (gets(s) != NULL) {
		count = 0,i=0;
		while (s[i]) {
			if (s[i] == ' ') {
				count++;
			}
			i++;
		}
		p = (char *)calloc(1, strlen(s) + 3 * count + 1);
		for (i = strlen(s) - 1, j = strlen(s) + 3 * count - 1; i >= 0; i--) {
			if (s[i] == ' ') {
				p[j] = '0';
				p[j - 1] = '2';
				p[j - 2] = '0';
				p[j - 3] = '%';
				j = j - 4;
			}
			else {
				p[j] = s[i];
				j--;
			}
		}
		printf("%s\n", p);
		free(p);
		p = NULL;
	}
	return 0;
}

Notes:
j = strlen(s) + 3 * count - 1
假设你字符串长度是30,你申请了31字符的空间,你最后一个字母的位置是s[29],肯定不是s[30]. s[30]是结束符。数组下标是从0开始的。

### Java 中控制输出字符串前面空格数量的方法 在 Java 中,可以通过多种方式来控制输出字符串前面的空格数量。以下是几种常见的方式: #### 使用 `StringBuffer` 和循环插入空格 通过创建一个 `StringBuffer` 对象并使用 `insert()` 方法可以在指定位置插入空格。这种方法适用于需要动态决定插入位置的情况。 ```java class Solution { public String addSpaces(String s, int[] spaces) { StringBuffer sb = new StringBuffer(s); for (int i = 0; i < spaces.length; i++) { sb.insert(spaces[i] + i, " "); } return sb.toString(); } } ``` 此代码片段展示了如何在一个给定的位置列表中插入空格[^1]。 #### 使用 `printf` 或者 `format` 方法 Java 提供了 `System.out.printf()` 和 `String.format()` 方法,允许式化输出字符串。这些方法支持通过占位定义固定的宽度,并自动填充前置空格。 ```java public class Main { public static void main(String[] args) { System.out.printf("%8s\n", "hello"); // 输出右侧对齐,左侧补充空格至总长度为8 System.out.println(String.format("%8s", "world")); // 同上效果 } } ``` 上述例子中,`%8s` 表示最小段宽度为8个间,不足部分由左端白填补[^2]。 #### 自定义函数计算所需空格数并拼接 当需要更灵活地控制每行打印的内容时,可以编写自定义逻辑来确定要添加多少个空格,再将其与原字符串连接起来形最终结果。 ```java public class Main { public static void main(String[] args) { String str = "example"; int totalWidth = 15; StringBuilder result = new StringBuilder(); while ((totalWidth -= str.length()) > 0) { result.append(' '); } result.append(str); System.out.println(result.toString()); } } ``` 这段程序会先算出还需要多少个额外间才能满足设定的整体宽度,之后逐一遍历追加相应数量的空格到目标字符串之前[^3]。 #### 利用正则表达式替 对于某些特殊情况下的需求,比如只希望在单词之间增加固定间距而不改变原有结构,则可考虑采用正则表达式的手段来进行匹配和替操作。 ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String inputStr = "this is an example."; Pattern pattern = Pattern.compile("(\\S+)"); Matcher matcher = pattern.matcher(inputStr); StringBuilder outputBuilder = new StringBuilder(); while (matcher.find()) { outputBuilder.append(matcher.group()).append(" "); // 插入五个空格作为分隔 } System.out.println(outputBuilder.substring(0, outputBuilder.length() - 5)); // 移除最后一个多余的间隔 } } ``` 这里利用了 `\S+` 来捕获连续非序列(即单个词),并在它们后面附加一定量的空格以达到预期的效果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值