Reputation: 15
the exercise asking for using only loops not construction functions or arrays every help on all sites using arrays and construction functions. I took a week to reach the code, and study alot of trials and looking for similar problem set but all help , not reach to last step input: string 1: ooo string 2: Wooooooooow
output: 7 that not correct
output must be (3) my code working in all strings input but incorrect at duplicated letters
Scanner input = new Scanner(System.in);
String text1 = input.nextLine();
String text2 = input.nextLine();
int res = 0;
for (int i=0;i<text2.length()-text1.length();i++)
{
if (text1.charAt(0) == text2.charAt(i))
{
boolean found = true;
for (int j=0;j<text1.length() && found;j++)
if (text1.charAt(j) != text2.charAt(i+j))
found = false;
if (found)
res++;
}
}
System.out.println(res);
Upvotes: 1
Views: 229
Reputation: 159086
When found, you need to skip the found text.
Since loop does i++
, that means:
if (found) {
res++;
i += text1.length() - 1;
}
UPDATE
Also, the code will not find the substring if it is at the end of the string, because the outer loop ends early, so change <
to <=
:
for (int i = 0; i <= text2.length() - text1.length(); i++) {
Upvotes: 1
Reputation: 79035
You are almost there. With the following changes, your code will work as expected:
i
by text1.length() - 1
each time text1
is found and j == text1.length()
. After you increment i
by text1.length() - 1
, the loop's increment part will increment i
by 1
which will result into i
being incremented by text1.length()
.i < text2.length() - text1.length()
to i < text2.length()
.j<text1.length() && found
to j < text1.length() && found && i + j < text2.length()
.You can also make your program more efficient by breaking the inner loop as soon as the condition, text1.charAt(j) != text2.charAt(i + j)
becomes true
.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the substring: ");
String text1 = input.nextLine();
System.out.print("Enter the string to search into: ");
String text2 = input.nextLine();
int res = 0;
for (int i = 0; i < text2.length(); i++) {
if (text1.charAt(0) == text2.charAt(i)) {
boolean found = true;
int j;
for (j = 0; j < text1.length() && found && i + j < text2.length(); j++) {
if (text1.charAt(j) != text2.charAt(i + j)) {
found = false;
break;
}
}
if (j == text1.length() && found) {
res++;
i += text1.length() - 1;
}
}
}
System.out.println(res);
}
}
A sample run:
Enter the substring: ooo
Enter the string to search into: Wooooooooow
3
Upvotes: 1