Encoding 从pascal中的字符串中删除字符会导致控制台pascal中出现问号

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

我正在尝试编写一个简单的程序,将删除字符串中的所有“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) 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问号