Форум программистов, компьютерный форум, киберфорум
bytestream
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Как определить, содержит ли строка подстроку в JavaScript

Запись от bytestream размещена 19.01.2025 в 13:55
Показов 1529 Комментарии 0
Метки javascript

Нажмите на изображение для увеличения
Название: d80da41e-bf27-41aa-8125-41a42aea8a1b.png
Просмотров: 59
Размер:	2.85 Мб
ID:	9263
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных методов и подходов для решения этой задачи, каждый из которых имеет свои особенности и преимущества.

В современном JavaScript строки являются неизменяемыми (иммутабельными) последовательностями символов, что означает невозможность изменения отдельных символов после создания строки. Эта особенность влияет на то, как мы работаем со строками и выполняем в них поиск. При выполнении любой операции со строкой создается новая строка, оставляя исходную неизменной.

Для поиска подстроки в строке разработчики могут использовать различные инструменты: метод includes(), который появился в спецификации ES6 и предоставляет простой способ проверки наличия подстроки; классический метод indexOf(), позволяющий не только определить наличие подстроки, но и найти её позицию; а также мощный механизм регулярных выражений, предоставляющий гибкие возможности для сложного поиска и сопоставления паттернов. Каждый из этих инструментов имеет свою область применения и особенности использования, которые необходимо учитывать при разработке.

Метод includes()



Метод includes() представляет собой современный и интуитивно понятный способ проверки наличия подстроки в строке, который был добавлен в JavaScript с появлением стандарта ES6. Этот метод возвращает логическое значение true, если строка содержит указанную подстроку, и false в противном случае. Благодаря своей простоте и выразительности, includes() стал одним из наиболее популярных инструментов для работы со строками.

Базовый синтаксис метода includes() весьма прост и состоит из вызова метода на строке с передачей искомой подстроки в качестве аргумента. Рассмотрим это на конкретном примере:

Javascript
1
2
3
const text = "JavaScript - мощный язык программирования";
const hasWord = text.includes("мощный"); // Вернёт true
const hasPhrase = text.includes("Python"); // Вернёт false
Метод includes() также принимает второй необязательный параметр - позицию, с которой следует начать поиск подстроки. Этот параметр позволяет ограничить область поиска определенной частью строки:

Javascript
1
2
3
const message = "Привет, мир! Привет, JavaScript!";
console.log(message.includes("Привет", 10)); // true
console.log(message.includes("Привет", 20)); // false
При работе с методом includes() важно помнить о чувствительности к регистру. В отличие от некоторых других языков программирования, JavaScript по умолчанию выполняет поиск с учетом регистра символов. Это означает, что строки "JavaScript" и "javascript" будут рассматриваться как различные:

Javascript
1
2
3
const text = "JavaScript разработка";
console.log(text.includes("javascript")); // false
console.log(text.includes("JavaScript")); // true
Для выполнения поиска без учета регистра необходимо предварительно привести обе строки к одному регистру с помощью методов toLowerCase() или toUpperCase(). Этот подход часто используется при создании функций поиска, нечувствительных к регистру:

Javascript
1
2
3
const text = "JavaScript разработка";
const searchTerm = "javascript";
console.log(text.toLowerCase().includes(searchTerm.toLowerCase())); // true
При работе с методом includes() следует учитывать несколько практических аспектов его применения. Один из наиболее распространенных случаев использования - это проверка наличия определенных ключевых слов или фраз в пользовательском вводе. Рассмотрим пример реализации простой системы фильтрации комментариев:

Javascript
1
2
3
4
5
6
7
8
9
function isCommentAppropriate(comment) {
    const forbiddenWords = ['спам', 'реклама', 'нецензурно'];
    return !forbiddenWords.some(word => comment.toLowerCase().includes(word));
}
 
const comment1 = "Отличная статья о JavaScript!";
const comment2 = "СПАМ! Посетите наш сайт...";
console.log(isCommentAppropriate(comment1)); // true
console.log(isCommentAppropriate(comment2)); // false
Метод includes() также эффективен при валидации данных, например, при проверке корректности email-адреса или URL. Хотя для полноценной валидации рекомендуется использовать регулярные выражения, в простых случаях includes() может быть достаточно:

Javascript
1
2
3
4
5
6
7
function isValidEmail(email) {
    return email.includes('@') && email.includes('.');
}
 
function isValidUrl(url) {
    return url.toLowerCase().includes('http://') || url.toLowerCase().includes('https://');
}
При работе с массивами строк метод includes() можно комбинировать с другими методами массивов, создавая мощные инструменты для фильтрации и поиска. Например, для поиска всех элементов массива, содержащих определенную подстроку:

Javascript
1
2
3
4
5
6
7
8
9
const technologies = [
    'JavaScript Framework',
    'Python Library',
    'JavaScript Runtime',
    'Ruby Framework'
];
 
const jsRelated = technologies.filter(tech => tech.includes('JavaScript'));
console.log(jsRelated); // ['JavaScript Framework', 'JavaScript Runtime']
Важно отметить, что метод includes() особенно полезен при работе с многострочным текстом, так как он учитывает символы новой строки и другие специальные символы. Это делает его идеальным инструментом для анализа больших текстовых блоков:

Javascript
1
2
3
4
5
6
7
8
const multilineText = `
    function example() {
        return "Hello World";
    }
`;
 
console.log(multilineText.includes('function')); // true
console.log(multilineText.includes('return')); // true
При обработке больших объемов текста следует помнить, что метод includes() выполняет поиск по всей строке, что может влиять на производительность. В таких случаях, если известно примерное положение искомой подстроки, рекомендуется использовать второй параметр метода для указания начальной позиции поиска, что может значительно ускорить процесс.

Дана строка. Определить, содержит ли строка только символы
Дана строка. Определить, содержит ли строка только символы 'a', 'b', 'c' или нет. Javascript. Если можно, то оставьте пояснения. Спасибо.

Как добавить вторую переменную в javascript - тип "строка"?
есть код: <html> <head> <script> function showHint(str) { if (str.length == 0) { document.getElementById("txtHint").innerHTML =...

Как определить версию JavaScript?
Как определить версию JavaScript ?

Содержит ли строка (string) подстроку
Есть ли для этого встроенные методы, или надо писать свой костыль?


Метод indexOf()



Метод indexOf() является одним из классических инструментов JavaScript для работы со строками, который позволяет не только определить наличие подстроки, но и найти её точное положение в строке. В отличие от метода includes(), indexOf() возвращает числовое значение - индекс первого вхождения искомой подстроки или -1, если подстрока не найдена.

Базовый синтаксис метода indexOf() предполагает передачу искомой подстроки в качестве первого аргумента. Дополнительно можно указать начальную позицию поиска в качестве второго аргумента. Рассмотрим пример использования этого метода:

Javascript
1
2
3
4
const text = "JavaScript обработка строк в JavaScript";
const position = text.indexOf("JavaScript"); // Вернёт 0
const secondPosition = text.indexOf("JavaScript", 1); // Вернёт 27
const notFound = text.indexOf("Python"); // Вернёт -1
Одним из преимуществ метода indexOf() является возможность использования возвращаемого значения для выполнения различных манипуляций со строкой. Например, можно извлечь подстроку до или после найденного текста:

Javascript
1
2
3
const url = "https://example.com/path/to/resource";
const slashPosition = url.indexOf("/", 8); // Начинаем поиск после 'https://'
const domain = url.substring(8, slashPosition); // Получаем 'example.com'
Метод indexOf() также часто используется в циклах для поиска всех вхождений подстроки. Такой подход позволяет создавать более сложные алгоритмы обработки текста:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function findAllOccurrences(str, searchStr) {
    const positions = [];
    let pos = str.indexOf(searchStr);
    
    while (pos !== -1) {
        positions.push(pos);
        pos = str.indexOf(searchStr, pos + 1);
    }
    
    return positions;
}
 
const text = "JavaScript - это мощный язык. JavaScript везде!";
const results = findAllOccurrences(text, "JavaScript");
console.log(results); // [0, 35]
При работе с методом indexOf() важно помнить о его чувствительности к регистру символов. Для выполнения поиска без учета регистра необходимо предварительно привести строки к одному регистру. Вот пример реализации такого подхода:

Javascript
1
2
3
4
5
6
function caseInsensitiveIndexOf(str, searchStr) {
    return str.toLowerCase().indexOf(searchStr.toLowerCase());
}
 
const text = "JavaScript и javascript";
console.log(caseInsensitiveIndexOf(text, "JAVASCRIPT")); // Вернёт 0
Метод indexOf() также эффективен при работе с массивами строк, особенно в комбинации с другими методами массивов. Например, можно создать функцию для поиска индекса элемента, содержащего определенную подстроку:

Javascript
1
2
3
const technologies = ['JavaScript', 'Python', 'Ruby', 'JavaScript Framework'];
const jsIndex = technologies.findIndex(tech => tech.indexOf('JavaScript') !== -1);
console.log(jsIndex); // Вернёт 0
Важной особенностью метода indexOf() является его способность работать с юникод-символами и спецсимволами. В отличие от некоторых других методов поиска, indexOf() корректно обрабатывает эмодзи, суррогатные пары и другие специальные символы:

Javascript
1
2
const textWithEmoji = "Hello Emoji World!";
console.log(textWithEmoji.indexOf("Emoji")); // Корректно найдет позицию эмодзи
При сравнении производительности indexOf() с другими методами поиска подстроки стоит отметить его эффективность при работе с короткими и средними по длине строками. Метод использует встроенный механизм поиска подстроки, оптимизированный на уровне движка JavaScript:

Javascript
1
2
3
4
const longText = "Очень длинный текст...".repeat(1000);
console.log(performance.now());
longText.indexOf("текст");
console.log(performance.now());
Одним из практических применений метода indexOf() является разбор строк форматированного текста. Например, при обработке CSV-файлов или пользовательского ввода в определенном формате:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function parseCSVLine(line) {
    const values = [];
    let startPos = 0;
    let commaPos;
    
    while ((commaPos = line.indexOf(',', startPos)) !== -1) {
        values.push(line.substring(startPos, commaPos));
        startPos = commaPos + 1;
    }
    values.push(line.substring(startPos));
    
    return values;
}
 
const csvLine = "JavaScript,TypeScript,Node.js,React";
console.log(parseCSVLine(csvLine));
Метод indexOf() также эффективен при работе с путями файлов и URL. Он позволяет легко извлекать отдельные компоненты пути или определять расширение файла:

Javascript
1
2
3
4
5
6
7
function getFileExtension(filename) {
    const dotPosition = filename.indexOf('.');
    return dotPosition === -1 ? '' : filename.substring(dotPosition);
}
 
const filename = "document.pdf";
console.log(getFileExtension(filename)); // Вернёт '.pdf'
При работе с методом indexOf() важно помнить о возможности использования его в сочетании с другими строковыми методами для создания более сложной логики обработки текста. Например, для замены всех вхождений подстроки на другое значение:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function replaceAll(str, search, replacement) {
    let result = str;
    let position;
    while ((position = result.indexOf(search)) !== -1) {
        result = result.substring(0, position) + replacement + 
                result.substring(position + search.length);
    }
    return result;
}
 
const text = "JavaScript - лучший язык! JavaScript forever!";
console.log(replaceAll(text, "JavaScript", "TypeScript"));

Регулярные выражения



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

В JavaScript регулярное выражение можно создать двумя способами: с использованием литерального синтаксиса или конструктора RegExp. Литеральный синтаксис предполагает заключение шаблона в прямые слешы, в то время как конструктор принимает строку или литерал регулярного выражения:

Javascript
1
2
3
4
5
6
const regexLiteral = /JavaScript/;
const regexConstructor = new RegExp('JavaScript');
 
// С использованием флагов
const regexWithFlags = /javascript/i; // флаг i для поиска без учета регистра
const regexConstructorWithFlags = new RegExp('javascript', 'i');
Для поиска подстроки с помощью регулярных выражений часто используется метод test(), который возвращает логическое значение, указывающее на наличие или отсутствие совпадения. Этот метод особенно полезен при валидации данных:

Javascript
1
2
3
4
5
6
7
const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const email = "user@example.com";
console.log(emailRegex.test(email)); // true
 
const phoneRegex = /^\+?\d{1,3}[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$/;
const phone = "+1 (555) 123-4567";
console.log(phoneRegex.test(phone)); // true
Метод match() предоставляет более подробную информацию о найденных совпадениях, возвращая массив с результатами поиска. При использовании флага g (global) метод вернет все найденные совпадения, а не только первое:

Javascript
1
2
3
4
5
6
7
8
9
10
const text = "JavaScript и TypeScript - языки программирования. JavaScript везде!";
const regex = /JavaScript/g;
const matches = text.match(regex);
console.log(matches); // ['JavaScript', 'JavaScript']
 
// Использование групп захвата
const dateRegex = /(\d{2})-(\d{2})-(\d{4})/;
const date = "25-12-2023";
const dateParts = date.match(dateRegex);
console.log(dateParts); // ['25-12-2023', '25', '12', '2023']
Регулярные выражения поддерживают множество специальных символов и конструкций, позволяющих создавать сложные шаблоны поиска. Например, квантификаторы позволяют указать количество повторений элемента, а символьные классы - определить допустимые символы:

Javascript
1
2
3
const wordBoundaryRegex = /\bJava\b/; // Поиск слова "Java" как отдельного слова
const numberRegex = /\d+\.\d{2}/; // Поиск чисел с двумя десятичными знаками
const whitespaceRegex = /\s+/; // Поиск одного или более пробельных символов
При использовании регулярных выражений для расширенного поиска часто требуется работать с группами и обратными ссылками. Группы позволяют захватывать части совпадения и затем использовать их в замене или дальнейшей обработке. Рассмотрим пример использования групп для обработки форматированного текста:

Javascript
1
2
3
4
const logEntry = "2023-12-25 14:30:45 - User login successful";
const logRegex = /(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) - (.*)/;
const [full, date, time, message] = logEntry.match(logRegex);
console.log({ date, time, message });
Метод replace() в сочетании с регулярными выражениями предоставляет мощные возможности для преобразования текста. При использовании функции замены можно выполнять сложные преобразования на основе найденных совпадений:

Javascript
1
2
3
4
const html = "Текст с <tag>специальными</tag> тегами";
const replacedHtml = html.replace(/<(\w+)>(.*?)<\/\1>/g, (match, tag, content) => {
    return `[${tag.toUpperCase()}]${content}[/${tag.toUpperCase()}]`;
});
Для сложных случаев поиска часто используются утверждения просмотра вперед и назад (lookahead и lookbehind). Эти конструкции позволяют проверять контекст вокруг совпадения, не включая его в результат:

Javascript
1
2
3
4
5
6
7
const text = "100$ 200€ 300¥";
const priceRegex = /\d+(?=[$€¥])/g; // Находит числа, за которыми следует символ валюты
console.log(text.match(priceRegex)); // ['100', '200', '300']
 
const domainRegex = /(?<=@)[^.]+\.[^.]+$/;
const email = "user@example.com";
console.log(email.match(domainRegex)); // ['example.com']
При работе с многострочным текстом полезны флаги m (multiline) и s (dotall). Флаг m позволяет работать с началом и концом строк внутри текста, а флаг s заставляет точку соответствовать также символам новой строки:

Javascript
1
2
3
4
5
6
7
const multilineText = `
    function example() {
        return true;
    }
`;
const functionRegex = /^    function.*?{.*?}$/ms;
console.log(functionRegex.test(multilineText)); // true
Для поиска повторяющихся слов или фраз можно использовать обратные ссылки, которые позволяют ссылаться на ранее найденные группы в том же регулярном выражении:

Javascript
1
2
3
const duplicateWordRegex = /\b(\w+)\s+\1\b/gi;
const text = "В тексте тексте есть повторяющиеся слова слова";
console.log(text.match(duplicateWordRegex)); // ['тексте тексте', 'слова слова']

Оптимизация поиска



При разработке веб-приложений выбор правильного метода поиска подстроки может существенно влиять на производительность программы. Каждый из доступных в JavaScript методов имеет свои особенности и оптимален для определенных сценариев использования. Понимание этих особенностей позволяет создавать более эффективные приложения.

Метод includes() демонстрирует наилучшую производительность при простом поиске подстроки, особенно когда требуется только проверить наличие текста без определения его позиции. Внутренняя реализация этого метода оптимизирована для быстрого сканирования строки:

Javascript
1
2
3
4
const longText = "Очень длинный текст для поиска...".repeat(1000);
console.time('includes');
const hasSubstring = longText.includes("текст");
console.timeEnd('includes');
При необходимости определения позиции подстроки метод indexOf() показывает схожую производительность с includes(). Однако при многократном поиске одной и той же подстроки более эффективным может оказаться предварительное создание регулярного выражения:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
const text = "JavaScript разработка";
const searchTerm = "JavaScript";
 
// Менее эффективно при многократном использовании
for(let i = 0; i < 1000; i++) {
    text.indexOf(searchTerm);
}
 
// Более эффективно для многократного поиска
const regex = new RegExp(searchTerm, 'g');
for(let i = 0; i < 1000; i++) {
    regex.test(text);
}
При работе с большими объемами текста важно учитывать особенности различных подходов к поиску. Для коротких строк разница в производительности между методами практически незаметна, но она становится существенной при увеличении объема данных. В таких случаях рекомендуется использовать кэширование результатов поиска и избегать избыточных операций:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class StringSearcher {
    constructor(text) {
        this.text = text;
        this.searchCache = new Map();
    }
 
    findSubstring(searchTerm) {
        if (this.searchCache.has(searchTerm)) {
            return this.searchCache.get(searchTerm);
        }
        
        const result = this.text.includes(searchTerm);
        this.searchCache.set(searchTerm, result);
        return result;
    }
}
При выборе метода поиска следует также учитывать требования к регистру символов и необходимость использования специальных паттернов. Если требуется только простой поиск без учета регистра, преобразование строк в нижний регистр с использованием includes() может оказаться более эффективным, чем создание регулярного выражения с флагом i.

Особого внимания заслуживает оптимизация поиска при работе с большими наборами строк или при необходимости многократного поиска. В таких случаях эффективным решением может быть предварительная обработка данных и создание индексированных структур:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class StringIndex {
    constructor() {
        this.index = new Map();
    }
 
    addString(id, text) {
        const words = text.toLowerCase().split(/\s+/);
        words.forEach(word => {
            if (!this.index.has(word)) {
                this.index.set(word, new Set());
            }
            this.index.get(word).add(id);
        });
    }
 
    search(term) {
        const searchTerm = term.toLowerCase();
        return this.index.has(searchTerm) ? Array.from(this.index.get(searchTerm)) : [];
    }
}
При работе с динамически изменяющимся контентом важно правильно выбирать момент для выполнения поиска. Использование техник дебоунсинга и тротлинга помогает оптимизировать количество операций поиска при вводе пользователя:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function debounce(func, delay) {
    let timeoutId;
    return function (...args) {
        clearTimeout(timeoutId);
        timeoutId = setTimeout(() => func.apply(this, args), delay);
    };
}
 
const optimizedSearch = debounce((searchTerm) => {
    const results = performSearch(searchTerm);
    updateUI(results);
}, 300);
При реализации функционала автодополнения или живого поиска следует учитывать возможность прерывания предыдущих поисковых операций при получении новых запросов. Это особенно важно при асинхронном поиске:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let currentSearchController = null;
 
async function liveSearch(term) {
    if (currentSearchController) {
        currentSearchController.abort();
    }
    
    currentSearchController = new AbortController();
    try {
        const results = await performAsyncSearch(term, currentSearchController.signal);
        displayResults(results);
    } catch (error) {
        if (error.name === 'AbortError') {
            console.log('Поиск прерван');
        }
    }
}
Применение этих оптимизационных техник позволяет создавать эффективные и отзывчивые приложения, способные обрабатывать большие объемы текстовых данных без заметной потери производительности.

Сравнительный анализ методов и лучшие практики



При разработке приложений в JavaScript выбор оптимального метода поиска подстроки зависит от конкретных требований проекта. Метод includes() является наиболее простым и интуитивно понятным решением для базовых проверок наличия подстроки. Его следует использовать, когда требуется только определить присутствие текста без необходимости знать его точное местоположение.

Метод indexOf() предоставляет расширенные возможности по сравнению с includes(), позволяя определить точную позицию подстроки в тексте. Этот метод особенно полезен при необходимости последующей обработки найденного текста или при поиске множественных вхождений подстроки. Однако при работе с большими объемами текста или при необходимости сложного поиска с учетом различных условий более эффективным решением становятся регулярные выражения.

Регулярные выражения предоставляют наиболее мощный и гибкий инструментарий для поиска и обработки текста. Они незаменимы при необходимости поиска по сложным паттернам, валидации данных или извлечении информации из структурированного текста. Однако их использование требует более тщательного подхода к оптимизации и тестированию, так как неправильно составленные регулярные выражения могут существенно снизить производительность приложения.

При выборе метода поиска рекомендуется учитывать не только функциональные требования, но и контекст использования: размер обрабатываемого текста, частоту выполнения операций поиска и необходимость поддержки специальных случаев, таких как поиск без учета регистра или работа с многострочным текстом. В критичных для производительности случаях следует применять кэширование результатов и использовать оптимизированные структуры данных для индексации текста.

Содержит ли строка определенную подстроку
Помогите решить задачу. Требуется проверить, содержит ли строка определенную подстроку, она может располагаться через другие символы, главное буквы...

Проверить содержит ли строка подстроку
Каким образом проверить что в строке содержится подстрока, если строка содержит в себе несколько раз подстроку: List&lt;string&gt; Names = new...

Проверка содержит ли строка подстроку из списка в котором список строк)
есть у меня такая структура class Block { List&lt;string&gt; str=new List&lt;string&gt;(); } List&lt;Block&gt; BlockList=new List&lt;Block&gt;(); ...

регулярное выражение кот. будет проверять содержит ли строка подстроку вида....
напишите плз с ходу регулярное выражение кот. будет проверять содержит ли строка подстроку вида 'пробелы, две одинаковых буквы, затем одна отличная...

Дана строка. Определить, содержит ли строка только символы 'a', 'b', 'c' или нет
Помогите сделать пожалуйста !

Строка: Определить, содержит ли строка только символы 'а', 'Ь', 'с' или нет
Дана строка. Определить, содержит ли строка только символы 'а', 'Ь', 'с' или нет.

Задана строка. Определить, содержит ли строка достаточно букв,чтобы составить слово, введенное с клавиатуры
Задана строка. Определить, содержит ли строка достаточно букв,чтобы составить слово, введенное с клавиатуры

Задана строка. Определить, содержит ли строка достаточно букв,чтобы составить слово, введенное с клавиатуры.
Помогите решить пожалуйста)) Надо в Turbo Delphi 2006!!! Заранее спасибо))) Задана строка. Определить, содержит ли строка достаточно букв,чтобы...

Дана символьная строка. Определить, содержит ли строка числа, если да, то вывести на экран только четные
Прошу не просто написать программу, а помочь ее понять, потому что до ввода строки у меня все получается , а потом не могу сообразить как описать.

Regexp; как определить содержит ли строка цифры и буквы одновременно в любом порядке
Как с помощью регулярного выражения выяснить содержит ли строка буквы и цифры, но в любом порядке. Например выражение (+) будет верным если...

Определить входит ли строка в подстроку
Определить входит ли строка в подстроку.Строки считывать из файла.Использовать функцию библиотеки string .Помогите пожалуйста.

Дана строка символов до точки. Определить, сколько слов, состоящих из 5 и более символов, содержит данная строка
Доброго времени суток! Нужно решить такую задачу (желательно с блок-схемой): Дана строка символов до точки. Определить, сколько слов, состоящих из 5...

Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Ошибка "Cleartext HTTP traffic not permitted" в Android
hw_wired 13.02.2025
При разработке Android-приложений можно столнуться с неприятной ошибкой "Cleartext HTTP traffic not permitted", которая может серьезно затруднить отладку и тестирование. Эта проблема особенно. . .
Изменение версии по умолчанию в NVM
hw_wired 13.02.2025
Node Version Manager, или коротко NVM - незаменимый инструмент для разработчиков, использующих Node. js. Многие сталкивались с ситуацией, когда разные проекты требуют различных версий Node. js,. . .
Переименование коммита в Git (локального и удаленного)
hw_wired 13.02.2025
Git как система контроля версий предоставляет разработчикам множество средств для управления этой историей, и одним из таких важных средств является возможность изменения сообщений коммитов. Но зачем. . .
Отличия Promise и Observable в Angular
hw_wired 13.02.2025
В веб-разработки асинхронные операции стали неотъемлимой частью почти каждого приложения. Ведь согласитесь, было бы странно, если бы при каждом запросе к серверу или при обработке больших объемов. . .
Сравнение NPM, Gulp, Webpack, Bower, Grunt и Browserify
hw_wired 13.02.2025
В современной веб-разработке существует множество средств сборки и управления зависимостями проектов, каждое из которых решает определенные задачи и имеет свои особенности. Когда я начинаю новый. . .
Отличия AddTransient, AddScoped и AddSingleton в ASP.Net Core DI
hw_wired 13.02.2025
В современной разработке веб-приложений на платформе ASP. NET Core правильное управление зависимостями играет ключевую роль в создании надежного и производительного кода. Фреймворк предоставляет три. . .
Отличия между venv, pyenv, pyvenv, virtualenv, pipenv, conda, virtualenvwrapp­­er, poetry и другими в Python
hw_wired 13.02.2025
В Python существует множество средств для управления зависимостями и виртуальными окружениями, что порой вызывает замешательство даже у опытных разработчиков. Каждый инструмент создавался для решения. . .
Навигация с помощью React Router
hw_wired 13.02.2025
React Router - это наиболее распространенное средство для создания навигации в React-приложениях, без которого сложно представить современную веб-разработку. Когда мы разрабатываем сложное. . .
Ошибка "error:0308010C­­:dig­ital envelope routines::unsup­­ported"
hw_wired 13.02.2025
Если вы сталкиваетесь с ошибкой "error:0308010C:digital envelope routines::unsupported" при разработке Node. js приложений, то наверняка уже успели поломать голову над её решением. Эта коварная ошибка. . .
Подключение к контейнеру Docker и работа с его содержимым
hw_wired 13.02.2025
В мире современной разработки контейнеры Docker изменили подход к созданию, развертыванию и масштабированию приложений. Эта технология позволяет упаковать приложение со всеми его зависимостями в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru