упражнение, предлагающее использовать только циклы, а не функции построения или массивы, помогает на всех сайтах, использующих массивы и функции построения. Мне потребовалась неделя, чтобы добраться до кода, и я изучил множество испытаний и искал похожий набор проблем, но все помогало, а не доходил до последнего шага. вход: строка 1: ооо строка 2: Уууууууу
выход: 7 это не правильно
вывод должен быть (3) мой код работает при вводе всех строк, но неверен при дублировании букв
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);
Вы почти там. Со следующими изменениями ваш код будет работать так, как ожидалось:
i
на text1.length() - 1
каждый раз, когда находят text1
и j == text1.length()
. После того, как вы увеличите i
на text1.length() - 1
, часть увеличения цикла увеличит i
на 1
, что приведет к увеличению i
на text1.length()
.i < text2.length() - text1.length()
на i < text2.length()
.j<text1.length() && found
на j < text1.length() && found && i + j < text2.length()
.Вы также можете сделать свою программу более эффективной, разорвав внутренний цикл, как только условие text1.charAt(j) != text2.charAt(i + j)
станет 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);
}
}
Пример запуска:
Enter the substring: ooo
Enter the string to search into: Wooooooooow
3
Я пытаюсь продолжить этот курс, и я продолжил курс, чтобы понять этот набор проблем.
Не могли бы вы помочь всем посетителям, таким как я, найти это решение с точными алгоритмами для достижения этой идеи.
@MohamedElkady - это хорошая идея. Как-нибудь сегодня сделаю.
когда я снова проверю string1:the - string2:студенты усердно работают на инженерном факультете, потому что им это нравится - вывод - ошибка, пожалуйста, проверьте еще раз @Arvind Kumar Avinash - по этой причине я прошу алогрифемы - попробуйте (ооо / Уууууууу) и (/ студенты усердно работают на факультете)
вы ... (что я могу сказать) Спасибо, но эта проблема, я думаю, на всех сайтах не завершена, пока не знаю, я собираюсь прекратить изучение этого курса, чтобы изучить это решение.
@MohamedElkady - я представил блок-схему, чтобы вам и будущим посетителям было легче понять программу. Меня не будет на пару часов. Не стесняйтесь оставлять заметки в случае каких-либо проблем / сомнений, и я рассмотрю это, как только вернусь.
При обнаружении нужно пропустить найденный текст.
Поскольку цикл выполняет i++
, это означает:
if (found) {
res++;
i += text1.length() - 1;
}
ОБНОВЛЯТЬ
Кроме того, код не найдет подстроку, если она находится в конце строки, потому что внешний цикл заканчивается раньше, поэтому замените <
на <=
:
for (int i = 0; i <= text2.length() - text1.length(); i++) {
Это не удастся для ввода, строка 1: the
и строка 2: the studentsth aretworkingthehardinthefacultyofthe
.
@Andreas, не могли бы вы сделать свое решение и блок-схему для изучения и проведения тестов, чтобы выявить ошибки. Спасибо
@MohamedElkady А? Вы попросили помочь выяснить, что не так с вашим кодом, и этот ответ полностью охватывает это. StackOverflow не является учебным сайтом, поэтому я не уверен, о чем еще вы спрашиваете. Если вам нужна блок-схема, нарисуйте ее.
@Андреас, эта программа стала путем обучения для меня или кого-либо еще, и если будет много дискуссий, тем больше информации и технологий мы узнаем. Спасибо
спасибо за вашу помощь, но когда я проверяю ввод: строка 1: строка 2: студенты усердно работают на факультете - вывод: 3 неверный вывод, должно быть 4.