Encoding 从pascal中的字符串中删除字符会导致控制台pascal中出现问号
我正在尝试编写一个简单的程序,将删除字符串中的所有“o”字母。 例如:Encoding 从pascal中的字符串中删除字符会导致控制台pascal中出现问号,encoding,console,pascal,freepascal,Encoding,Console,Pascal,Freepascal,我正在尝试编写一个简单的程序,将删除字符串中的所有“o”字母。 例如: I love cats 输出: I lve cats 我编写了以下代码: var x:integer; text:string; text_no_o:string; begin text:='I love cats'; for x := 0 to Length(text) do //writeln(Ord(text[6])); if(Ord(text[x])=111) t
I love cats
输出:
I lve cats
我编写了以下代码:
var
x:integer;
text:string;
text_no_o:string;
begin
text:='I love cats';
for x := 0 to Length(text) do
//writeln(Ord(text[6]));
if(Ord(text[x])=111) then
else
text_no_o[x]:=text[x];
write(text_no_o);
end.
begin
end;
end.
当文本为英语时,程序运行良好。
但如果我把它改成俄语。它返回控制台中的问号。
对俄语进行小修改的代码
var
x:integer;
text:string;
text_no_o:string;
begin
text:='Русский язык мой родной';
for x := 0 to Length(text) do
//writeln(Ord(text[6]));
if(Ord(text[x])=190) then
else
text_no_o[x]:=text[x];
write(text_no_o);
end.
begin
end;
end.
我收到的控制台结果是:
Русский язык м�й р�дн�й
我希望你能收到
Русский язык мй рднй
我发现问题可能是由于控制台中的编码设置不正确造成的,所以我应该强制pascal使用CP1252而不是ANSI
我正在使用免费的Pascal编译器版本3.2.0+dfsg-12 for Linux。
注意:我不允许使用StringReplace或Pos简单解决方案:
function Simple_StripO (Text : String) : String;
var
i : integer;
Text2 : string;
begin
Text2 := '';
for i := 1 to Length(Text) do
if Text[i] <> 'o' then
Text2 := Text2 + Text[i];
Result := Text2; // Or Simple_StripO := Text2;
end;
函数Simple\u StripO(文本:String):String;
变量
i:整数;
Text2:字符串;
开始
Text2:='';
对于i:=1到长度(文本)do
如果文本[i]“o”,则
Text2:=Text2+Text[i];
结果:=Text2;//或简单条带:=Text2;
结束;
如果您删除了中“我爱猫”的所有字母
您将得到'
。对不起。我的错误。我的意思是删除所有的o字母。不,它不适合英语。如前所述,它在“text\u no\u o[x]:=text[x]”行生成SIGSGEV异常。您可能会发现,找出原因很有启发性……我尝试了更简单的代码,但它仍然以同样的方式运行if(Ord(text[counter])=111),然后write(text[counter])代码>@MartynA如果我理解正确,它会发生,因为我使用的方法Lenght从一开始返回长度。但我的数组是从零开始的,这可能会导致问题。遗憾的是,无法与russian@AlexZaslavskis,您需要将其与西里尔字母进行比较。我把它改成了“of”,但它并没有真正的帮助。Ansi和Ord的使用也会在控制台中显示me问号