It is hard to make a better type of code arranging.

本文探讨了使用Pascal语言进行编程时遇到的问题及解决办法,并分享了如何利用SDL库进行开发的经验。作者提到了代码排版难题,并提供了一个外部链接供读者进一步了解相关内容。

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

这里的版面难以排的像样子,最严重的是段首必须缩进。如果随便写点英文或中文都还凑合,但是想贴段英文的代码(不用中文编程)就会被搞乱得不成样子。

想贴一段Pascal代码,“插入代码”里居然没有这个语言,随便拿一个别的又会被意外地加亮。

所以你如果不幸来到了这里,又对这个话题有点兴趣,请看这个链接:

http://scarscc.yo2.cn/articles/category/sdl-object-pascal

我的讨论还是比较浅的,如果入了门之后看C的范例,之后自己译成Pascal也不难。

 

Implement the classic method for composing secret messages called a square code. Given an English text, output the encoded version of that text. First, the input is normalized: the spaces and punctuation are removed from the English text and the message is down-cased. Then, the normalized characters are broken into rows. These rows can be regarded as forming a rectangle when printed with intervening newlines. For example, the sentence ```text "If man was meant to stay on the ground, god would have given us roots." ``` is normalized to: ```text "ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots" ``` The plaintext should be organized into a rectangle as square as possible. The size of the rectangle should be decided by the length of the message. If `c` is the number of columns and `r` is the number of rows, then for the rectangle `r` x `c` find the smallest possible integer `c` such that: - `r * c >= length of message`, - and `c >= r`, - and `c - r <= 1`. Our normalized text is 54 characters long, dictating a rectangle with `c = 8` and `r = 7`: ```text "ifmanwas" "meanttos" "tayonthe" "groundgo" "dwouldha" "vegivenu" "sroots " ``` The coded message is obtained by reading down the columns going left to right. The message above is coded as: ```text "imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau" ``` Output the encoded text in chunks that fill perfect rectangles `(r X c)`, with `c` chunks of `r` length, separated by spaces. For phrases that are `n` characters short of the perfect rectangle, pad each of the last `n` chunks with a single trailing space. ```text "imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau " ``` 上述为题目要求,请用C语言实现,函数声明如下: char *ciphertext(const char *input)
最新发布
08-13
The task at hand is to implement the square code cipher in C. This involves normalizing the input text, arranging it in a rectangle, and then reading the characters column-wise to produce the encoded message. Here's a detailed breakdown of how to achieve this: ### Steps to Implement the Square Code Cipher 1. **Normalization of Input**: - Remove all non-alphanumeric characters and convert the string to lowercase. - Calculate the number of rows and columns required to fit the normalized string into a rectangular grid. The number of columns should be the ceiling of the square root of the length of the string, and the number of rows should be the ceiling of the length divided by the number of columns. 2. **Grid Construction**: - Fill the grid with the normalized text, row by row. 3. **Column-wise Reading**: - Read the characters column by column to generate the encoded message. Here is a C implementation that follows these steps: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <math.h> // Function to normalize the input string void normalizeInput(char *input, char **normalized) { int len = strlen(input); *normalized = (char *)malloc(len + 1); int j = 0; for (int i = 0; i < len; i++) { if (isalnum(input[i])) { (*normalized)[j++] = tolower(input[i]); } } (*normalized)[j] = '\0'; } // Function to calculate rows and columns void calculateDimensions(int length, int *rows, int *cols) { *cols = ceil(sqrt(length)); *rows = ceil((double)length / *cols); } // Function to encode the message using square code cipher void squareCodeCipher(char *input, char **encoded) { char *normalized; normalizeInput(input, &normalized); int length = strlen(normalized); int rows, cols; calculateDimensions(length, &rows, &cols); // Allocate memory for the grid char **grid = (char **)malloc(rows * sizeof(char *)); for (int i = 0; i < rows; i++) { grid[i] = (char *)malloc(cols * sizeof(char)); memset(grid[i], '\0', cols); } // Fill the grid with normalized text int index = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (index < length) { grid[i][j] = normalized[index++]; } else { grid[i][j] = ' '; // Fill remaining spaces with space } } } // Allocate memory for the encoded string *encoded = (char *)malloc(length + rows + 1); // Extra space for spaces between columns index = 0; // Read the grid column-wise for (int j = 0; j < cols; j++) { for (int i = 0; i < rows; i++) { if (grid[i][j] != '\0') { (*encoded)[index++] = grid[i][j]; } } if (j < cols - 1) { (*encoded)[index++] = ' '; // Add space between columns } } (*encoded)[index] = '\0'; // Free allocated memory for (int i = 0; i < rows; i++) { free(grid[i]); } free(grid); free(normalized); } int main() { char input[] = "If man was meant to stay on the ground, God would have given us roots."; char *encoded; squareCodeCipher(input, &encoded); printf("Encoded: %s\n", encoded); free(encoded); return 0; } ``` ### Explanation of the Code - **Normalization**: The `normalizeInput` function processes the input string to remove non-alphanumeric characters and converts it to lowercase[^1]. - **Dimension Calculation**: The `calculateDimensions` function computes the number of rows and columns needed for the grid based on the length of the normalized string[^1]. - **Grid Construction**: A 2D array `grid` is created to hold the characters of the normalized string, filled row by row[^1]. - **Column-wise Reading**: The grid is read column by column to form the encoded message, with spaces added between columns for readability[^1]. This implementation ensures that the input is properly normalized, the grid is constructed according to the calculated dimensions, and the encoded message is generated by reading the grid column-wise[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值