Как получить подстроку из строки до определенного символа? — C#
Допустим, у меня есть строка str = «слово1^слово2^слово3^. ^словоN» . Как мне получить «слово1»?
Можно использовать str.Split(‘^’)[0] , но, мне кажется, для больших N это не совсем рационально, другие «слова» мне не нужны.
Может тогда так?
Смотрим, где первый раз встречается разделитель, выбираем подстроку.
У метода string.Split есть перегрузка, принимающая максимальное количество подстрок для возврата:
Это эффективно именно в случае больших N.
Если нужно получить одно первое значение, я бы взял способ из другого ответа с Substring + IndexOf .
Если нужно получить несколько первых значений, я бы взял способ Split с параметром count.
Как считать из фала строку до переноса строки или до определенного символа?
сейчас данные считываются так
in_file>>line;
то есть по словам, но часть файлов содержит много данных из-за чего они могут считываться слишком долго.
Пробовал использовать
getlne(in_file, line);
но это отправляет в line весь файл целиком.
При использовании
getline(in_file, line, ‘\n’);
или
getline(in_file, line, ‘>’);
выдает ошибку «no matching function for call ‘getline’.
Чтение строки от и до определенного символа
Я хотел бы знать, возможно ли прочитать определенную строку n-длины, от символа x до символа y без необходимости разбивать ее на более мелкие части.
У меня есть следующая строка для пути в AD CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com , и я хотел бы иметь возможность просто прочитать ее someName часть без разделения на = или <
Причина в том, что мне не нужно делать групповое сравнение, как я делаю это прямо сейчас:
Я бы предпочел сделать условие if равным, но я не хочу всегда разбивать вышеупомянутые пути / группы в массив дважды. Как я могу это сделать?
4 ответа
Используя простую обработку строк с IndexOf и Substring :
PS: может также взглянуть на Существует ли класс .NET, который может анализировать строки CN = из LDAP? для вашего специального варианта использования!
С Split вы можете проверить, соответствует ли любой из указанных ключей поисковому значению.
Во время проверки, если значение равно значению поиска, вы также можете просто вернуть значение.
Я все еще использовал Split , несмотря на то, что вы сказали, что не хотите его использовать, так как я думаю, что это хороший вариант.
Функции обработки строк в Cи
В программе строки могут определяться следующим образом:
- как строковые константы;
- как массивы символов;
- через указатель на символьный тип;
- как массивы строк.
Кроме того, должно быть предусмотрено выделение памяти для хранения строки.
Любая последовательность символов, заключенная в двойные кавычки «» , рассматривается как строковая константа .
Для корректного вывода любая строка должна заканчиваться нуль-символом '\0' , целочисленное значение которого равно 0. При объявлении строковой константы нуль-символ добавляется к ней автоматически. Так, последовательность символов, представляющая собой строковую константу, будет размещена в оперативной памяти компьютера, включая нулевой байт.
Под хранение строки выделяются последовательно идущие ячейки оперативной памяти. Таким образом, строка представляет собой массив символов. Для хранения кода каждого символа строки отводится 1 байт.
Для помещения в строковую константу некоторых служебных символов используются символьные комбинации. Так, если необходимо включить в строку символ двойной кавычки, ему должен предшествовать символ «обратный слеш»: ‘\»‘ .
Строковые константы размещаются в статической памяти. Начальный адрес последовательности символов в двойных кавычках трактуется как адрес строки. Строковые константы часто используются для осуществления диалога с пользователем в таких функциях, как printf() .
При определении массива символов необходимо сообщить компилятору требуемый размер памяти.
Компилятор также может самостоятельно определить размер массива символов, если инициализация массива задана при объявлении строковой константой:
В этом случае имена m2 и m3 являются указателями на первые элементы массивов:
- m2 эквивалентно &m2[0]
- m2[0] эквивалентно ‘Г’
- m2[1] эквивалентно ‘o’
- m3 эквивалентно &m3[0]
- m3[2] эквивалентно ‘x’
При объявлении массива символов и инициализации его строковой константой можно явно указать размер массива, но указанный размер массива должен быть больше, чем размер инициализирующей строковой константы:
Для задания строки можно использовать указатель на символьный тип .
В этом случае объявление массива переменной m4 может быть присвоен адрес массива:
Здесь m3 является константой-указателем. Нельзя изменить m3 , так как это означало бы изменение положения (адреса) массива в памяти, в отличие от m4 .
Для указателя можно использовать операцию увеличения (перемещения на следующий символ):
Массивы символьных строк
Иногда в программах возникает необходимость описание массива символьных строк . В этом случае можно использовать индекс строки для доступа к нескольким разным строкам.
В этом случае poet является массивом, состоящим из четырех указателей на символьные строки. Каждая строка символов представляет собой символьный массив, поэтому имеется четыре указателя на массивы. Указатель poet[0] ссылается на первую строку:
*poet[0] эквивалентно 'П',
*poet[l] эквивалентно '-'.
Инициализация выполняется по правилам, определенным для массивов.
Тексты в кавычках эквивалентны инициализации каждой строки в массиве. Запятая разделяет соседние
последовательности.
Кроме того, можно явно задавать размер строк символов, используя описание, подобное такому:
Разница заключается в том, что такая форма задает «прямоугольный» массив, в котором все строки имеют одинаковую длину.
Свободный массив
Операции со строками
Большинство операций языка Си, имеющих дело со строками, работает с указателями. Для размещения в оперативной памяти строки символов необходимо:
- выделить блок оперативной памяти под массив;
- проинициализировать строку.
Для выделения памяти под хранение строки могут использоваться функции динамического выделения памяти. При этом необходимо учитывать требуемый размер строки:
Для ввода строки использована функция scanf() , причем введенная строка не может превышать 9 символов. Последний символ будет содержать '\0' .
Функции ввода строк
Для ввода строки может использоваться функция scanf() . Однако функция scanf() предназначена скорее для получения слова, а не строки. Если применять формат "%s" для ввода, строка вводится до (но не включая) следующего пустого символа, которым может быть пробел, табуляция или перевод строки.
Для ввода строки, включая пробелы, используется функция
В качестве аргумента функции передается указатель на строку, в которую осуществляется ввод. Функция просит пользователя ввести строку, которую она помещает в массив, пока пользователь не нажмет Enter.
Функции вывода строк
Для вывода строк можно воспользоваться рассмотренной ранее функцией
или в сокращенном формате
Для вывода строк также может использоваться функция
которая печатает строку s и переводит курсор на новую строку (в отличие от printf() ). Функция puts() также может использоваться для вывода строковых констант, заключенных в кавычки.
Функция ввода символов
Для ввода символов может использоваться функция
которая возвращает значение символа, введенного с клавиатуры. Указанная функция использовалась в рассмотренных ранее примерах для задержки окна консоли после выполнения программы до нажатия клавиши.
Функция вывода символов
Для вывода символов может использоваться функция
которая возвращает значение выводимого символа и выводит на экран символ, переданный в качестве аргумента.
Пример Посчитать количество введенных символов во введенной строке.
Результат выполнения 