Suren97 Ответов: 1

C# как посчитать количество слов, которые я написал в txt-файле


в txt файле у меня есть предложение: Please write any Sentence.
я должен создать функцию, которая имеет 2 параметра` первый файл address,второе-это any word.
Эта функция должна возвращать, сколько раз встречалось слово в предложении.
Например, если я назову его в основном так`
Console.WriteLine(Counter(hasce,"any"));

он будет печатать 1, потому что есть 1 слово имя "any" в предложениях.

Что я уже пробовал:

Я уже пробовал вот так`
static public int Counter(string address,string word)
        {
            int myword= 0;
            string text = File.ReadAllText(address);
            if (word == text)
            {
                myword++;
            }
            
            return myword;
        }


static void Main(string[] args)
        {
           Console.WriteLine(Counter(address,"any"));
        }

Maciej Los

Это зависит от того, что вы подразумеваете под словом"слово"...
Адрес может иметь номера и другие знаки: "пост 444, Сэмплсити, огромная улица 45"
Сколько слов в этой строке?

Suren97

?

Animesh Datta

так в чем же ваша проблема в коде ? где ты застрял ?

Suren97

Он не работает, он напечатал 0, но у меня есть слово "любой" в предложении

Suren97

4 слова Вот "пожалуйста, напишите любое предложение",это просто текст в txt-файле,я создал txt-файл и написал этот небольшой текст в файле, теперь мне нужно написать любое слово, например "any", и оно вернет 1, но с этой функцией оно напечатало 0. почему?

1 Ответов

Рейтинг:
5

Maciej Los

Пожалуйста, прочтите мой комментарий к этому вопросу.

Ты должен Расщеплять[^] строка на пробелах, например:

string address = "Please write any Sentence";
string filter = "any";

int counter = address.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries).Count(x=>x==filter);
Console.WriteLine("{0}", counter);


[РЕДАКТИРОВАТЬ]
Я забыл упомянуть о верхних/нижних буквах! Обратите внимание на это сравнение: ("any"=="Any") вернет false.
Я бы настоятельно рекомендовал прочитать это:
Как сравнить строки (руководство по программированию на C#) | Microsoft Docs[^]
Строка.Метод Сравнения (String, String, Boolean) (System)[^]

Удачи вам!


[Правка #2]
Из-за комментариев OP, вот полный пример:
void Main()
{
	
	string path = @"D:\data.txt";
	string find = "any";
	string[] lines =  File.ReadAllLines(path);
	int cTotal = 0;
	
	foreach(string line in lines)
	{
		cTotal += Counter(line, find);
	}
	
	Console.WriteLine("A '{0}' has been found {1} time", find, cTotal);
	
}

// Define other methods and classes here
public static int Counter(string line, string findword)
{
	int c= 0;
	
	string[] words = line.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
	foreach(string word in words)
	{
		if (string.Compare(word, findword, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreCase)==0)
		{
			c++;
		}
	}
	return c
}


Больше:
Файл.Метод ReadAllLines (Строка) (System.IO)[^]


Suren97

можете ли вы сказать еще один вариант без StringSplitOptions.RemoveEmptyEntries).Подсчет(x=>x==фильтр)?
более легкий вариант?

Maciej Los

Метод Split возвращает массив слов:
string[] words = address.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries)
Вы должны выполнить цикл по массиву, сравнить Слово и вернуть количество равных слов.

Suren97

мне кажется, ты меня не понимаешь.вот мой адрес.
строковый адрес = "C:/Users/User/Desktop/data.txt в этом файле есть написанное предложение "пожалуйста, напишите любое предложение".Теперь я должен создать функцию,которая имеет 2 параметра счетчика(строковый адрес, строковое слово).Когда я вызову эту функцию в Main` Counter(address,"write"),она должна вывести 1, если вместо "write" я пишу "kvbkdfb", то она должна вывести 0.Как я могу написать эту функцию?

Maciej Los

Я вас очень хорошо понимаю, но вы не понимаете того, что я пытаюсь вам сказать...

Suren97

как я могу использовать его в функции?

Maciej Los

Пожалуйста, проверьте обновленное решение (после [EDIT #2])

Suren97

вы делаете это сложнее, в основном я должен вызывать только эту функцию Counter(path,"any")

Suren97

и без глобализации

Maciej Los

Это твоя работа, а не моя. Я дал вам рабочее решение. Вы должны изменить его в соответствии с вашими потребностями!

Suren97

хорошо, большое вам спасибо :)

Maciej Los

Всегда пожалуйста. Пожалуйста, примите мой ответ как решение (зеленая кнопка).

Suren97

ладно :)