编写算法,实现下面功能。已知字符串S1中存放一段英文,写出算法format(s1,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串S2, 其多余的字符送S3。用C语言编写代码,加注释
时间: 2024-03-25 20:36:25 浏览: 81
C++ 实现KMP算法,字符串匹配算法
```
#include <stdio.h>
#include <string.h>
// 将字符串s按照长度为n进行格式化为两端对齐的字符串s2,多余的字符存放在s3中
void format(char *s1, char *s2, char *s3, int n) {
int len = strlen(s1); // 获取字符串s1的长度
int count = 0; // 记录当前已经处理的字符数
int space = 0; // 记录当前行需要添加的空格数
// 遍历字符串s1中的每一个字符
for (int i = 0; i < len; i++) {
// 如果当前行还能容纳当前字符,则将字符添加到s2中,并且计数器加1
if (count < n) {
s2[count] = s1[i];
count++;
space = n - count; // 计算当前行需要添加的空格数
}
// 如果当前行已经无法容纳当前字符,则将多余的字符添加到s3中
else {
s3[strlen(s3)] = s1[i];
}
// 如果当前行已经处理完毕,或者已经处理到字符串s1的末尾,则将当前行进行对齐
if (count == n || i == len - 1) {
// 计算左边需要添加的空格数
int left_space = space / 2;
for (int j = 0; j < left_space; j++) {
s2[count - space + j] = ' ';
}
// 计算右边需要添加的空格数
int right_space = space - left_space;
for (int j = 0; j < right_space; j++) {
s2[count - right_space + j] = ' ';
}
// 如果当前行处理完毕,则将计数器重置为0
if (i != len - 1) {
count = 0;
}
}
}
}
int main() {
char s1[] = "Hello world, this is a test!";
char s2[100] = "";
char s3[100] = "";
int n = 10;
format(s1, s2, s3, n);
printf("s2: %s\n", s2);
printf("s3: %s\n", s3);
return 0;
}
```
说明:
1. 使用 `strlen` 函数获取字符串的长度;
2. 遍历字符串 `s1` 中的每一个字符,如果当前行还能容纳当前字符,则将字符添加到 `s2` 中,并且计数器加1,否则将多余的字符添加到 `s3` 中;
3. 如果当前行已经处理完毕,或者已经处理到字符串 `s1` 的末尾,则将当前行进行对齐。对齐时,计算左边需要添加的空格数和右边需要添加的空格数,分别添加到 `s2` 中;
4. 如果当前行处理完毕,则将计数器重置为0。
阅读全文