turbo pascal 从字符串中删除第二个 space
turbo pascal remove second space from string
这对我来说似乎很简单,但我无法理解它。
我想取一个字符串,检查 spaces,忽略第一个 space,
但删除所有后续的 space。例如:
MyString := 'Alexander The Great';
输出将是 'Alexander TheGreat'
非常感谢! (使用 DOS 版 Turbo Pascal 7.0)
我通常使用 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 的字符进行了 cicle。如果我找到的字符不是 space,我将其添加到结果字符串中。如果字符是 'space' 并且它是第一个(它是第一个,因为 count=0)我加 1 来计数并将字符添加到结果字符串中。然后,如果该字符再次是 space,我将得到 count=1 让我继续忽略此 space。
谢谢 Mauros 的帮助,虽然我今天早上在回来查看之前已经弄明白了。这就是答案,对于将来可能 运行 的任何人来说:
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}
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 }
这对我来说似乎很简单,但我无法理解它。 我想取一个字符串,检查 spaces,忽略第一个 space, 但删除所有后续的 space。例如:
MyString := 'Alexander The Great';
输出将是 'Alexander TheGreat'
非常感谢! (使用 DOS 版 Turbo Pascal 7.0)
我通常使用 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 的字符进行了 cicle。如果我找到的字符不是 space,我将其添加到结果字符串中。如果字符是 'space' 并且它是第一个(它是第一个,因为 count=0)我加 1 来计数并将字符添加到结果字符串中。然后,如果该字符再次是 space,我将得到 count=1 让我继续忽略此 space。
谢谢 Mauros 的帮助,虽然我今天早上在回来查看之前已经弄明白了。这就是答案,对于将来可能 运行 的任何人来说:
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}
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 }