【2023.10.27练习】C语言-字符串转换

计算机能力挑战初赛2020.17题

题目描述:

有一组均由字符A~Z和a~z组成的字符串,其中要求将字符串中各字符按如下要求进行转换:

A<->z、B<->y、C<->x、...... 、X<->c、Y<->b、Z<->a

输入: 第一行输入字符串(长度<=10000)

输出: 输出转换之后的字符串。

样例输入: Algorithm

样例输出: zOTLIRGSN

样例输入: Hello

样例输出: sVOOL


题目分析:

显然将输入的字符转化为ASCII码

根据观察得出输入的字符ASCII码 = **187 -**输出的字符ASCII码。

cpp 复制代码
int main(void) {
	char str_1[5000];/*str_1表示输入的字符串*/
	scanf("%s", str_1);/*输入字符串*/

	char str_2[5000];
	/*for (int i = 0; p != 0; i++) {
		str_2[i] = 187 - str_1[i];
		p++;
		};*/

	for (int i = 0; i <= strlen(str_1); i++) {
		if (i < strlen(str_1)) {
			str_2[i] = 187 - str_1[i];
		}
		else {
			str_2[i] = 0;
		}
	}
	printf("%s", str_2);
	return 0;
}

但是还不够,定义的字符串长度是有限的,使用动态顺序表让输入可以无限长。


最终代码:

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {

	/*str_1表示输入的字符串*/
	char* str_1 = NULL;
	int capacity = 5;
	int size = 0;
	str_1 = (char*)malloc(capacity * sizeof(char));

	int flag = 0;
	for(int i = 0;flag == 0;i++){
		if (size == capacity) {
			int newcapacity = capacity * 2;
			char * str = (char*)realloc(str_1,newcapacity * sizeof(char));
			str_1 = str;
			capacity = newcapacity;
		}

		str_1[i] = getchar();/*输入字符串*/
		size++;
		if (str_1[i] == '\n') {
			flag = 1;
			str_1[i] = 0;/*str_1由字符数组转为字符串*/
		}
	}

	char* str_2 = NULL;
	str_2 = (char*)malloc(size * sizeof(char));

	for (int i = 0; i <= strlen(str_1); i++) {
		if (i < strlen(str_1)) {
			str_2[i] = 187 - str_1[i];
		}
		else {
			str_2[i] = 0;
		}
	}
	printf("%s", str_2);

	free(str_1);
	str_1 = NULL;
	free(str_2);
	str_2 = NULL;

	return 0;
}
相关推荐
晓蛋1 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿1 天前
重载、重写(覆盖)、重定义区别
c语言
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
phltxy1 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
phltxy1 天前
C 语言中的数据存储:从类型到二进制位
c语言