【PTA数据结构 | C语言版】字符串连接操作

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

题目

请编写程序,将给定字符串 t 连接在另一个给定字符串 s 的末尾。

输入格式:
输入先后给出主串 s 和待连接的字符串 t,每个非空字符串占一行,不超过 1000 个字符,以回车结束(回车不算在字符串内)。

输出格式:
在一行中输出将 t 连接在 s 末尾后的结果字符串 s。
如果连接后的字符串长度超过了 1000 个字符,则不要连接,而是在一行中输出 错误:连接将导致字符串长度超限。,并且在第二行输出原始主串 s。

输入样例:
This is
a test.

输出样例:
This is a test.

代码

#include <stdio.h>
#include <string.h>

#define MAX_LEN 1000  // 最大字符串长度限制

int main() {
    char s[MAX_LEN + 1];  // 主串
    char t[MAX_LEN + 1];  // 待连接字符串
    int pos;

    // 读取主串s
    fgets(s, MAX_LEN + 1, stdin);
    // 去除末尾的换行符
    if (s[strlen(s) - 1] == '\n') {
        s[strlen(s) - 1] = '\0';
    }

    // 读取待连接字符串t
    fgets(t, MAX_LEN + 1, stdin);
    // 去除末尾的换行符
    if (t[strlen(t) - 1] == '\n') {
        t[strlen(t) - 1] = '\0';
    }

    // 计算连接后的长度
    int len_s = strlen(s);
    int len_t = strlen(t);
    int total_len = len_s + len_t;

    // 判断是否超限
    if (total_len > MAX_LEN) {
        printf("错误:连接将导致字符串长度超限。\n");
        printf("%s\n", s);
    } else {
        // 执行连接操作
        strcat(s, t);
        // 输出结果
        printf("%s\n", s);
    }

    return 0;
}
### 关于天梯赛PTA题库中的C语言解答 对于天梯赛PTA题库中涉及的C语言编程问题,可以提供一些具体的例子来帮助理解如何解决这些问题。 #### L1-098 再进去几个人 此题目要求处理字符串并找出最长回文子串长度。给定一段文字输入,程序需遍历所有可能的子串组合,并通过双指针法验证这些子串是否构成回文结构[^1]。下面是一个简单的实现方式: ```c++ #include <iostream> using namespace std; string s; bool check(int l, int r) { while (l < r) { if (s[l] != s[r]) return false; l++; r--; } return true; } int main() { getline(cin, s); int n = s.size(), res = 1; for (int i = 0; i < n; ++i) for (int j = i; j < n; ++j) if (check(i, j)) res = max(res, j - i + 1); cout << res << endl; } ``` 这段代码首先读取一行作为待检测的字符串`s`,接着定义了一个辅助函数`check()`用于检验指定范围内的字符序列是否为回文。最后,在主循环里尝试每一对起始位置`(i,j)`之间的子串,并更新最大回文长度变量`res`直到找到最优解为止。 #### L2-001 紧急救援 针对更复杂的场景如紧急救援路径规划等问题,则涉及到图论算法的应用。这类问题通常会给出一张地图以及若干个地点间的连接关系,目标是在限定条件下求得最短路径或其他优化指标下的最佳方案[^2]。虽然这里没有具体展示完整的解决方案,但是可以根据实际情况选用Dijkstra、Floyd-Warshall等经典算法进行建模分析。 #### 善良(统计最小值和最大值) 另一个简单案例展示了怎样快速计算一组数据里的极值及其出现次数。该片段接收整数列表后分别记录下其中的最大值与最小值连同各自的频次输出结果[^3]。 ```c #include <stdio.h> int main() { int N; scanf("%d", &N); int abilities[N], min = 1000000, max = 0, minCount = 0, maxCount = 0; for (int i = 0; i < N; ++i) { scanf("%d", &abilities[i]); if (abilities[i] < min) min = abilities[i]; if (abilities[i] > max) max = abilities[i]; } for (int i = 0; i < N; ++i) { if (abilities[i] == min) minCount++; if (abilities[i] == max) maxCount++; } printf("%d %d\n", min, minCount); printf("%d %d\n", max, maxCount); return 0; } ``` 上述三个实例覆盖了不同难度级别的练习项目,有助于初学者逐步掌握利用C语言解决问题的方法技巧。当然实际比赛中还会遇到更多类型的挑战等待探索学习。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值