Ну, во-первых, вы должны понимать, что если вы хотите удалить символ потенциально из середины строки, все символы после удаленного символа должны быть смещены влево на один символ.Это не Ada-специфическая проблема.Если строка большая, это может быть довольно неэффективно.Я бы не назвал 80 символов или менее «большими».
Второе, что вы должны понять, это то, что в Ada, в отличие от многих языков, строки должны иметь идеальный размер.Это означает, что если вы собираетесь использовать переменную String
в качестве буфера (например, для ввода через Text_IO), вам также придется отслеживать фактическую длину допустимых данных в ней с другой переменной.
Учитывая это, можно легко написать код, который распознает символы, которые вам там не нужны, и удаляет их примерно так:
if (Bad_Index < Input_Length) then
Input(Bad_Index .. Input_Length - 1) := Input(Bad_Index + 1 .. Input_Length);
end if;
Input_Length := Input_Length - 1;
Однако это своего родаТрудный путь.Если у вас действительно есть строка, которой вы хотите манипулировать таким образом, вероятно, проще всего поместить ее в неограниченный строковый объект.Ada.Strings.Unbounded.Find_Token
и Ada.Strings.Unbounded.Delete
будут делать то, что вам нужно, и все, что вам нужно написать, - это цикл вокруг них.