复制文本:先输入要复制文本的起始位置和字符个数,然后再输入要粘贴的目的位置,实现粘贴。允许不断输入粘贴位置,实现多次粘贴,直到用户选择不再继续。每次粘贴后显示当前内容;c语言
时间: 2024-04-30 14:21:08 浏览: 82
多次复制,一次粘贴。改写Ctrl+C,Ctrl+V
3星 · 编辑精心推荐
以下是一个简单的C语言实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
int main() {
char text[MAX_LENGTH + 1]; // 存储文本的字符数组
int length; // 存储文本长度
int start, num; // 要复制的起始位置和字符个数
int dest; // 要粘贴的目的位置
char cont; // 用户是否继续的选择
printf("请输入文本:");
fgets(text, MAX_LENGTH + 1, stdin);
length = strlen(text) - 1;
printf("文本长度为:%d\n", length);
do {
printf("请输入要复制的起始位置和字符个数(用空格隔开):");
scanf("%d %d", &start, &num);
getchar(); // 消耗掉输入缓冲区中的回车符
printf("请输入要粘贴的目的位置:");
scanf("%d", &dest);
getchar(); // 消耗掉输入缓冲区中的回车符
if (start < 0 || start >= length || start + num > length || dest < 0 || dest > length) {
printf("输入的位置不合法,请重新输入!\n");
continue;
}
// 复制
char temp[MAX_LENGTH + 1];
strncpy(temp, text + start, num);
temp[num] = '\0';
// 粘贴
memmove(text + dest + num, text + dest, length - dest + 1); // 注意要将 '\0' 也复制过去
strncpy(text + dest, temp, num);
printf("当前文本内容为:%s\n", text);
printf("是否继续粘贴?(y/n)");
scanf("%c", &cont);
getchar(); // 消耗掉输入缓冲区中的回车符
} while (cont == 'y' || cont == 'Y');
return 0;
}
```
这个程序通过循环实现多次复制和粘贴,并在每次操作后显示当前文本内容。注意在输入完整个文本后,要用 `fgets()` 函数来读取,以避免 `scanf()` 函数中的空格和回车符造成的问题。另外,`strncpy()` 函数在复制时需要加上字符串结束符 `'\0'`,而 `memmove()` 函数则要将这个结束符也一并复制过去。
阅读全文