2015-02-07 2 views
1

Мне кажется, это просто для меня, но я не могу заставить свой мозг вокруг него. Я хочу взять строку, проверить пробелы, игнорировать первое пространство, , но удалить все последующие пробелы. Например:turbo pascal удалить второе пространство из строки

MyString: = 'Alexander The Great';

Выход будет 'Александр TheGreat'

Большое спасибо заранее! (Использование Turbo Pascal 7.0 для DOS)

ответ

1

Благодарим вас за помощь Мауро, хотя я понял это сегодня утром, прежде чем проверять здесь. Это ответ, для кого-то, кто мог бы работать в этом в будущем:

Crush the Name if it has more than one space in it 
For example: "Alexander The Great" Becomes "Alexander TheGreat", 
"John" stays as "John", "Doc Holiday" stays as "Doc Holiday" 
"Alexander The Super Great" becomes "Alexander TheSuperGreat" and 
so on and so forth. 

FirstSpacePosition := POS(' ',LT.Name); 
s := Copy(LT.Name,1,FirstSpacePosition); 
s2 := Copy(LT.Name,FirstSpacePosition,Length(LT.Name)); 
s := StripAllSpaces(s); 
s2 := StripAllSpaces(s2); 
Insert(' ',s,(Length(s)+1)); 
LT.Name := s+s2; 
StripTrailingBlanks2(LT.Name); 
StripLeadingBlanks(LT.Name);  

И StripAllSpaces функция выглядит следующим образом:

FUNCTION StripAllSpaces(s3:STRING):STRING; 
BEGIN 
WHILE POS(' ',s3)>0 DO Delete(s3,Pos(' ',s3),1); 
StripAllSpaces:=s3; 
END;{StripAllSpaces} 

And The StripLeadingBlanks/StripTrailingBlanks функции выглядит следующим образом:

PROCEDURE StripTrailingBlanks2(var Strg: string); 
BEGIN 
while Strg[Length(Strg)] = ' ' do 
Delete(Strg, Length(Strg), 1); 
END; { END StripTrailingBlanks } 

PROCEDURE StripLeadingBlanks(var Strg: string); 
BEGIN 
While (Length(Strg) > 0) and (Strg[1] = ' ') do 
Delete(Strg, 1, 1); 
END; { END StripLeadingBlanks } 
1

Я обычно использую Java, так что я не знаю, если это лучший способ сделать то, что вы спрашиваете, но, по крайней мере, кажется, работает ...

program nospaces(output); 
var 
MyString : string; 
ResultStr: string; 
count: integer; 
i: integer; 
Temp: string; 
n: string; 
begin 
ResultStr:=''; 
MyString := 'Alexander The Great'; 
writeln(MyString); 
count := 0; 
for i := 1 to length(MyString) do 
    begin 
    Temp := copy(MyString, i, 1); 
    if Temp = ' ' then 
    begin 
    If count=0 then 
     begin 
     count := count + 1; 
     ResultStr := ResultStr + Temp; 
     end; 
    end 
    else 
    begin 
    ResultStr := ResultStr + Temp; 
    end 
    end; 
writeln(ResultStr); 
readln(n); 
end. 

что я сделал? Я цитирую персонажей строки. Если признак, который я нашел, не является пространством, я добавляю это к полученной String. Если символ является «пространством», и он является первым (это первый, потому что count = 0), я добавляю 1 для подсчета и добавляю символ в результирующую строку. Тогда, если символ снова пробел, у меня будет счет = 1, который заставит меня продолжать игнорировать это пространство.

Смежные вопросы