样例输入: abcabcabc ab 样例输出: 0 3 6
#include <string.h>
int main() {
char ch1[101] = { 0 };
char ch2[31] = { 0 };
int n, m, i, j;
scanf_s("%s", ch1,100);
scanf_s("%s", ch2,30);
n = strlen(ch1);
m = strlen(ch2);
int pos[100] = { -1 };
int npos = -1;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (ch1[i + j] != ch2[j])
break;
}
if (j == m)
{
npos++;
pos[npos] = i;
}
}
if (npos == -1)
printf("NO");
else
for (i = 0; i<=npos; i++)
printf("%d ", pos[i]);
return 0;
}
这道题最简单的方法就是嵌套循环暴力解题,稍微复杂一点就是用 kmp 算法。如果只是课堂循环啥的,用嵌套循环暴力解题就好了。如果是做算法题的话,就需要用 kmp 算法。
package net.dc.lesson20.exercise;
public class GetStrPosition {
public static void main(String[] args) {
String str = "I love Java I love Python I love Internet";
//第一种方法
int frontLength = 0;//定义该变量用于记录匹配"love"的元素前面的长度
while(str.contains("love")){//只要该str字符串中有匹配"love"的元素,才进行以下操作
int index = str.indexOf("love");//定义该变量用于记录匹配"love"的元素在当前字符串的位置
//匹配"love"的元素位置等于frontLength加上index;加1为了从1开始计数,更加直观:
System.out.println(String.format("str[%d] = love", index + frontLength + 1));
frontLength += (index + 4);
str = str.substring(index + 4);//将字符串中匹配"love"元素的前面部分及其本身截取,留下后面的部分
}
System.out.println();
//第二种方法
String str_2 = "I love Java I love Python I love Internet";
String[] strArr = str_2.split(" ");
for (int i = 0; i < strArr.length; i++) {
if(strArr[i].equals("love")){
int frontLength_2 = 0;//定义该变量用于记录匹配"love"的元素前面的长度
for(int j = 0; j < i; j++){
frontLength_2 += strArr[j].length();
}//该循环是为了加上前面数组元素的长度
frontLength_2 += i;//加上前面空格的个数
//加1是因为,在数组中匹配该"love"元素的位置,并不仅仅只是前面所有元素的长度加上空格个数,还得算上该元素本身出现的位置
System.out.println(String.format("str[%d] = love", frontLength_2 + 1));
}
}
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632