利用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,像这种题目还有很多种解法,如果你有更好的方法,欢迎讨论哈,嘻嘻