用c语言编写程序:编写函数,删除字符串s中从下标k开始的n个字符(n和k从键盘输入)。
时间: 2023-06-13 17:02:17 浏览: 125
下面是用C语言编写的删除字符串函数:
```c
#include <stdio.h>
#include <string.h>
void delete_chars(char *s, int k, int n) {
int len = strlen(s);
if (k < 0 || k >= len) {
printf("Invalid index k!\n");
return;
}
if (n <= 0 || k + n > len) {
printf("Invalid number of characters to delete!\n");
return;
}
memmove(s + k, s + k + n, len - k - n + 1);
}
int main() {
char s[100];
int k, n;
printf("Enter a string: ");
fgets(s, sizeof(s), stdin);
s[strcspn(s, "\n")] = '\0'; // remove trailing newline
printf("Enter the starting index k: ");
scanf("%d", &k);
printf("Enter the number of characters to delete n: ");
scanf("%d", &n);
delete_chars(s, k, n);
printf("Result: %s\n", s);
return 0;
}
```
首先,我们通过 `fgets` 函数从标准输入读取字符串,并用 `strcspn` 函数去除字符串末尾的换行符。然后,我们从键盘输入起始位置 `k` 和要删除的字符数 `n`。接下来,我们调用 `delete_chars` 函数来删除字符串 `s` 中的字符。如果 `k` 或 `n` 不合法,则函数会输出错误信息并返回。如果参数合法,则使用 `memmove` 函数将要删除的字符向左移动,覆盖掉被删除的字符。最后,我们输出新的字符串 `s`。
注意,在使用 `memmove` 函数时,我们需要将起始位置设为 `s + k`,而不是 `&s[k]`,因为 `s` 是一个字符数组,类型为 `char*`,而不是一个指向字符的指针。
阅读全文