有一组均由字符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码。
- 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;
- }
但是还不够,定义的字符串长度是有限的,使用动态顺序表让输入可以无限长。
- #include
- #include
- #include
-
- 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;
- }
-