c语言 输入文件为invertsub.in,含有两行字符串s和t,分别以#作为串结束符。将s串中首次与t匹配的子串逆置,并将结果输出。 输出文件invertsub.out只有一行,包含一个串,是要求的输出结果。在行末也要有一个回车符。
时间: 2024-02-25 19:53:12 浏览: 64
C语言中把数字转换为字符串-sprintf
好的,我理解了你的问题。你可以尝试以下的 C 代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int main() {
char s[MAX_LEN], t[MAX_LEN];
char sub[MAX_LEN], rev_sub[MAX_LEN];
int s_len, t_len, sub_len, i, j, k;
// 读取输入
scanf("%[^#]#%[^#]#", s, t);
s_len = strlen(s);
t_len = strlen(t);
// 找到 s 中与 t 匹配的子串
for (i = 0; i <= s_len - t_len; i++) {
if (strncmp(s+i, t, t_len) == 0) {
strncpy(sub, s+i, t_len);
sub[t_len] = '\0';
break;
}
}
sub_len = strlen(sub);
// 将子串逆置
for (i = 0, j = sub_len - 1; i < sub_len; i++, j--) {
rev_sub[i] = sub[j];
}
rev_sub[sub_len] = '\0';
// 输出结果
for (i = 0, j = 0; i < s_len; i++) {
if (i == j && i < s_len - t_len + 1) {
printf("%s", rev_sub);
j += sub_len;
i += sub_len - 1;
} else {
printf("%c", s[i]);
}
}
printf("\n");
return 0;
}
```
你可以将上述代码保存为 `invertsub.c`,然后使用以下命令编译该文件:
```
gcc -o invertsub invertsub.c
```
接着,你可以使用以下命令执行程序并输入数据:
```
./invertsub < invertsub.in > invertsub.out
```
这样,程序就会从 `invertsub.in` 文件中读取输入,将结果输出到 `invertsub.out` 文件中。
阅读全文