MENU

库函数编写删除函数

• November 1, 2020 • 串和数组

利用C的库函数strlen()和strcpy(),编写算法void strDelete(char *str,int index,int length),功能是删除串S中从位置index开始的连续length个字符,若i>=strlen(str),则没有字符被删除,若i+m>strlen(str),则删除S中从位置i开始至末尾的字符


题目分析:

又是一个利用库函数编写其他函数的算法,删除字符串很简单,我们在设计的函数里面创建一个新的字符数组,这个字符数组用来存放我们想要得到的字符串,什么是我们想要的字符串?我们从头遍历原字符串,下标在index到index+length范围之内的就是我们要删除的字符,因此当我们遍历到这个下标区间时,直接跳过,其他字符串赋值到结果字符串就ok。最后利用strcpy_s()函数将结果字符串复制到原字符串str就可以了,非常简单,接下来看代码:

代码实现:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*字符串删除函数,成功返回1,失败返回0*/
int strDelete(char *str,int index,int length)
{
    int len = strlen(str);//获取原字符串的长度
    if (index >= len)
        return 0;
    char s[200];          //存放结果字符串
    int number = 0;
    for (int i = 0; i < index; i++)//将index之前的字符串放在结果字符串s中
        s[number++] = str[i];
    for (int i = index + length; i < len; i++)//将index+length后的字符串放在结果字符串s中
        s[number++] = str[i];
    s[number] = '\0';      //添加结束符
    strcpy_s(str, 200, s); //将结果字符串复制给str,带回主函数
    return 1;
}
int main()
{
    printf("请输入str:");
    char str[200] ;
    gets_s(str);
    printf("\n请输入index和length的值:");
    int index, length;
    scanf_s("%d %d", &index, &length);
    if(strDelete(str, index, length))
        printf("\n删除后的字符串为%s\n\n", str);
    else
        printf("\nindex大于字符串的长度,操作失败!\n");
    system("pause");
    return 0;
}

运行结果:

正常情况



index大于字符串长度



index小于字符串的长度,但index+length大于字符串的长度


代码编译器:Visual Studio 2017
ok,像这种题目还有很多种解法,如果你有更好的方法,欢迎讨论哈,嘻嘻

Archives QR Code Tip
QR Code for this page
Tipping QR Code