随便写的一个字符串的操作可以在一个子串中求出某一个子串的出现次数和出现的位置。
#include
<
iostream
>
#include < string >
using namespace std;
int PartPostion( char src[], char partString[], int pos)
// 从某一个位置开始定位子串的函数
... {
int i = pos; //从pos位置开始
int j = 0;
int length_src = strlen(src);
int lenght_partString = strlen(partString);
while(i < length_src && j < lenght_partString)
...{
if(src[i] == partString[j]) //如果相等则继续
...{
i++;
j++;
}
else //否则回溯
...{
i = i - j + 1;
j = 0;
}
}
if(j >= lenght_partString) //表示找到并返回
...{
return i - lenght_partString;
}
else
return -1;
}
int main()
... {
char srcString[] = "egabcrtabcvabc"; //定义主串
char partString[] = "abc"; //定义子串
int firstPos = PartPostion(srcString, partString, 6);
cout<<"第一次出现的位置为:"<<endl;
cout<<firstPos<<endl;
int currentPos = 0;
int length_src = strlen(srcString);
int lenght_partString = strlen(partString);
int i = 0; //用于保存出现子串的次数
int count[10]; //用于保存第i次出现子串的位置
while(currentPos <= length_src) //如果当前位置小于主串的长度
...{
currentPos = PartPostion(srcString, partString, currentPos);
if(currentPos < 0) //主串中不包含子串则跳出循环
...{
break;
}
else //记录第i次出现子串的位置
...{
count[i++] = currentPos;
}
currentPos += lenght_partString; //在主串中滑动子串个字符后继续比较
}
cout<<"出现的次数为:"<<i<<endl;
cout<<"出现的位置分别是:"<<endl;
for(int k = 0; k < i; k++) //分别输出出现的位置
cout<<count[k]<<" ";
return 0;
}
#include < string >
using namespace std;
int PartPostion( char src[], char partString[], int pos)
// 从某一个位置开始定位子串的函数
... {
int i = pos; //从pos位置开始
int j = 0;
int length_src = strlen(src);
int lenght_partString = strlen(partString);
while(i < length_src && j < lenght_partString)
...{
if(src[i] == partString[j]) //如果相等则继续
...{
i++;
j++;
}
else //否则回溯
...{
i = i - j + 1;
j = 0;
}
}
if(j >= lenght_partString) //表示找到并返回
...{
return i - lenght_partString;
}
else
return -1;
}
int main()
... {
char srcString[] = "egabcrtabcvabc"; //定义主串
char partString[] = "abc"; //定义子串
int firstPos = PartPostion(srcString, partString, 6);
cout<<"第一次出现的位置为:"<<endl;
cout<<firstPos<<endl;
int currentPos = 0;
int length_src = strlen(srcString);
int lenght_partString = strlen(partString);
int i = 0; //用于保存出现子串的次数
int count[10]; //用于保存第i次出现子串的位置
while(currentPos <= length_src) //如果当前位置小于主串的长度
...{
currentPos = PartPostion(srcString, partString, currentPos);
if(currentPos < 0) //主串中不包含子串则跳出循环
...{
break;
}
else //记录第i次出现子串的位置
...{
count[i++] = currentPos;
}
currentPos += lenght_partString; //在主串中滑动子串个字符后继续比较
}
cout<<"出现的次数为:"<<i<<endl;
cout<<"出现的位置分别是:"<<endl;
for(int k = 0; k < i; k++) //分别输出出现的位置
cout<<count[k]<<" ";
return 0;
}