c++中,输入两个字符串,怎样在第二个串中查找并删除第一个串,并且是不区分大小写的查找?
可不可以不用一个字符一个字符的比较?可能字符串中还含有数字,一个字符一个字符比较会很麻烦吧?还不能用stricmp匹配,求高手指导!...
可不可以不用一个字符一个字符的比较?可能字符串中还含有数字,一个字符一个字符比较会很麻烦吧?
还不能用stricmp匹配,求高手指导! 展开
还不能用stricmp匹配,求高手指导! 展开
3个回答
展开全部
#include <stdio>
/////// 字符串匹配,在主串中删除子串
int main()
{
int length_str( char *str);//声明子函数
char str1[512]={0}, str2[512]={0};
scanf("%s", str1);//主串
scanf("%s", str2);//子串
int len1 = length_str(str1);
int len2 = length_str(str2);
int count = 0; //匹配次数
int index[10]={0}; //子串在主串中的起始匹配位置
for (int i=0; i< len1-len2+1; i++) //计算匹配信息
{
int k=0;//子串内匹配次数
for (int j=0; j<len2; j++)
{
if ( str1[i+j] == str2[j] )
{
k++;
}
if (k==len2)
{
count++;
index[count-1] = i;
}
}
}
for (; count>0; count--) //根据匹配信息从主串删除子串
{
for (int m = index[count-1]; m<= len1-1-len2; m++)
{
str1[ m ] = str1[ m + len2 ];
}
len1 -= len2;
}
str1[len1] = '\0';
printf("Result: %s", str1);
return 0;
}
//////求字符串长度
int length_str( char *str)
{
int len = 0;
while( *str != '\0')
{
len++;
str++;
}
return len;
}
/////// 字符串匹配,在主串中删除子串
int main()
{
int length_str( char *str);//声明子函数
char str1[512]={0}, str2[512]={0};
scanf("%s", str1);//主串
scanf("%s", str2);//子串
int len1 = length_str(str1);
int len2 = length_str(str2);
int count = 0; //匹配次数
int index[10]={0}; //子串在主串中的起始匹配位置
for (int i=0; i< len1-len2+1; i++) //计算匹配信息
{
int k=0;//子串内匹配次数
for (int j=0; j<len2; j++)
{
if ( str1[i+j] == str2[j] )
{
k++;
}
if (k==len2)
{
count++;
index[count-1] = i;
}
}
}
for (; count>0; count--) //根据匹配信息从主串删除子串
{
for (int m = index[count-1]; m<= len1-1-len2; m++)
{
str1[ m ] = str1[ m + len2 ];
}
len1 -= len2;
}
str1[len1] = '\0';
printf("Result: %s", str1);
return 0;
}
//////求字符串长度
int length_str( char *str)
{
int len = 0;
while( *str != '\0')
{
len++;
str++;
}
return len;
}
展开全部
同意楼上,必须要一个一个比较硬两个都是字符串,字符串比较就必须完全匹配当然要一个一个比较咯
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议使用KMP串匹配算法。
追问
有没有简单点的,这个是研究生复试上机题目,应该不会太高深。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询