C#

(c#) Нужна помощь в работе со строками. (лучше если будет не само решение, а объяснение, спасибо)

1) Дана строка, изображающая целое положительное число. Вывести сумму цифр этого
числа.
2)Даны строки S и S 0 . Найти количество вхождений строки S 0 в строку S.
3)Дана строка, состоящая из русских слов, набранных заглавными буквами и
разделенных пробелами (одним или несколькими). Найти количество слов,
которые содержат хотя бы одну букву «А».
4)Посчитать количество неповторяющихся символов строке
Slava Yakovlev
Slava Yakovlev
150
1)
для начала нужно понимать, что строка это по сути просто массив символов (char[]).
а что такое char? по сути это тот же ushort (uInt16) или проще говоря целочисленное число.

так вооот... было бы не плохо этот массив символов превратить в массив цифр... но как это сделать?
мы знаем, что цифры в кодировке расположены по порядку... то есть если мы из символа цифры вычтем позицию символа '0' в нашей кодировки,
то получим 1 цифру, эквивалентную символу... но так как char это и есть число, то по сути мы просто может из каждого символа отнять '0' и получить массив цифр!

для компактности записи используем System.Linq и получим такую запись:

int result = str.Select(x => x - '0').Sum();

где:
str.Select(x => ...) - перебор всех символов спроки str, где и представление их в виде переменной x
(x => x - '0') - из каждого символа строки отнимает символ '0'
.Sum() - суммируем элементы получившегося массива.

все просто...

2)
задача может показаться сложной и требующей работы с циклами и множественным использованием IndexOf, но мы не будем решать ее в лоб...

по своей сути подсчет количества вхождений подстроки в строку ни чем не отличается от деления строки на слова...
просто представь, что S0 - пробел (разделитель), а все остальное просто текст, тогда в данной задаче нам необходимо посчитать количество пробелов...
но тут все просто! пробелов (разделителей) будет на 1 меньше, чем слов.

пишем:

int result = S.Split(S0).Length - 1;

где:
S.Split(S0) - деление строки на слова с разделителем S0

PS опять же это выражение точно будет работать на net core, но для net framework оно будет выглядеть примерно так:
int result = S.Split(new string[] { S0 }, StringSplitOptions.None).Length - 1;

все... я устал писать... если надо будет, то решение распишу попозже, пока только ответы:
3)
int result = str.Split().Where(x => x.Contains('А')).Count();
4)
int result = str.Distinct().Count();
Владимир Буйный
Владимир Буйный
2 054
Лучший ответ
1)

using System;
namespace Answer {
class Program {
static private void Main() {
var number = "285637";
var sum = 0;
for (var i = 0; i < number.Length; ++i) {
sum += int.Parse(number[i].ToString());
}
Console.WriteLine($"{number} => {sum}");
Console.ReadKey();
}
}
}
1) Дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа.
Это нобелевская за формулировку! Возможно правильнее было написать.
Дана строка, издалека чем-то напоминающая целое положительное число. Вывести сумму цифр этого числа.
Андрей Опалько
Андрей Опалько
74 422
Slava Yakovlev ну.. какая есть )