2010-11-08 4 views
1

Моя программа должна сделать следующее:Количество подстрок в строке

  1. Пользователь вводит строку: Университет Кордильер
  2. Пользователь вводит подстроку: эр
  3. Программа выводит подстроку-счета: 2 (Univ эр плотность от Cordill эр в)

я не должен использовать .str, но создать свой собственный метод.

+1

Пожалуйста прояснить этот вопрос. Это не имеет никакого смысла. – Feanor

+0

Разрешены ли регулярные выражения? Каковы требования к методу? И что вы уже придумали? Что работает? Что нет? Домашнее задание? – soulseekah

+1

Я попытался переписать ваш вопрос, но что такое '.str'? –

ответ

0
  1. Строка представляет собой последовательность char значений (например, массив)
  2. цикла по этой последовательности и для каждого полукокса (за исключением последнего в вашем примере):
    1. тест, если это полукокса равен первому символу вашего шаблона, и если следующий символ равен второму знаку вашего шаблона (приспособите, если у вас есть рисунки другого размера)
    2. Если результат теста равен true, увеличьте ваш счетчик.

Это базовый алгоритм. Если у вас есть это и работает, подумайте о специальных случаях, например, источник String пуст или короче, чем шаблон.

1

Наивный подход (проверка на подстроки по каждому возможному индексу) работает в О (пк), где п длина строки и к длина подстроки. Это может быть реализовано с помощью цикла for, и что-то вроде haystack.substring(i).startsWith(needle).

Существуют более эффективные алгоритмы. Вы можете посмотреть на Knuth-Morris-Pratt algorithm или Aho-Corasick algorithm. В противоположность наивному подходу оба этих алгоритма хорошо себя ведут и на входе, например, «найдите подстроку 100« X »в строке 10000 X.

1

Просто замените первое вхождение и подсчитайте до тех пор, пока не будет .

int count = 0; 
while (str.indexOf(subStr)>-1){ 
    str = str.replaceFirst(subStr, ""); 
    count++; 
} 
return count ; 
0

Вот мой код ....

import java.util.Scanner; 
public class occurrenceOf_Substring { 

public static void main(String[] args) { 


    Scanner input=new Scanner(System.in); 

    System.out.println(" Enter a string"); 

    String str=input.nextLine(); 

    System.out.println(" Enter a substring");  

    String substring=input.nextLine(); 

    int l=substring.length(); 



     int count=0;  
     int index=str.indexOf(substring); // To find first occurrence 


     while(index<str.length() && index != -1) 
     { 
      index=str.indexOf(substring,index+l);/// to find next occurrences 

      count=count+1; 
     } 


    System.out.println("substrin count is "+count); 
} } 
+0

Исправьте свое форматирование. Кроме того, возможно, объяснение ответа было бы полезным. –

0

Алгоритм:

шаг 1: преобразовать mainstring в массив символов

шаг 2: преобразовать подстроки в массив символов

шаг 3: сравнить два массивы посимвольно

Шаг 4: Если хотя бы один из символов в массиве подстрок не совпадает с массивом символов главной строки, начинается с первого символа субстрата ng, но продолжайте перемещение в основной строке

Шаг 5: Если все символы подстроки совпадают с приращением, счетчик и начните с первой позиции подстроки снова, это она.

import java.io.*; 
    import java.util.Scanner; 
    public class SubStringCount { 

public static void main(String[] args) throws IOException { 


    Scanner input=new Scanner(System.in); 
    System.out.println("Enter you Main string:"); 
    String mainstring=input.nextLine(); 
    System.out.println("Enter the substring"); 
    String substring=input.nextLine(); 
    int i=0;int j=0; 
    char[] str=mainstring.toCharArray(); // converting main string to character array 
    char[] sub=substring.toCharArray(); // converting substring to character array 
    int count=0; 
    while(i<str.length) 
    { 
     if(str[i]==sub[j]) 
     { 
        j++; 
     } 
     else 
     { 
      j=0; 
     } 
     if(j==sub.length) 
     { 
      j=0; 
      count++; 
     } 
     i++; 

    } 
+0

, пожалуйста, дайте мне знать, если есть какие-либо вопросы по этой программе, спасибо. –

0

В одной строке:

int count = (str.length() - str.replace(subStr, "").length())/subStr.length(); 
Смежные вопросы