计算对象pascal中字符串中的不同字符

无法B区

美好的一天,我编写了应该计算字符串中不同字符的代码,我的代码已经过数次输入测试,但无法计算此输入中的字符:

zcinitufxoldnokacdvtmdohsfdjepyfioyvclhmujiqwvmudbfjzxjfqqxjmoiyxrfsbvseawwoyynn 

它具有将近80个字符,Pascal可以读取的最大字符串的长度为256个字符。我找不到更好的算法来解决此问题,因此,我正在寻找该领域专家或任何愿意分享知识的人员的帮助。

我猜我的代码在每个循环中都跳了一个字符。

这是我的代码:

function freq(char: char; username : String): Integer;
var 
   i, auxfreq: Integer;
begin
    auxfreq:= 0;
    for i:= 1 to length(username) do
        if char = username[i] then
            auxfreq:= auxfreq + 1;
            //writeln(freq);    
    freq:= auxfreq;         
end; 

function OddUserName(username : String): Boolean;
var
    usernameaux : String;
    length_usernameaux, i : Integer;
    Result : Boolean;

begin
    Result:= false;
    usernameaux:= username;
    i:= 0;
    repeat
        i +=1; 
        length_usernameaux:= length(usernameaux);
        if freq(usernameaux[i], usernameaux) <> 1 then 
            delete(usernameaux, i, 1);
    until i = length_usernameaux;
    // length(usernameaux) is supposed to be the number of the distinct characters.
    
    {if length(usernameaux) mod 2 <> 0 then // you will have to ignore this.
        Result:= true; // odd}

    //writeln(usernameaux); 
    //writeln(length(usernameaux));
    OddUserName:= Result; // ignore this too    
end; 

衷心感谢您的帮助。

雷米·勒博

您不能正确考虑字符串的delete()字符长度变化

如果username为空,则由于repeat循环尝试访问索引1(不存在)中的字符,最终将访问无效字符实际上,您最终陷入一个无穷循环,因为从1开始并向上递增,但始终为0,所以i = length_usernameaux始终为False (至少循环会一直运行,直到溢出到负值,最后递增回为0,但是那时您很可能在发生这种情况之前就已经崩溃了代码)。ilength_usernameauxi

如果username不为空,则i每次循环迭代时递增在处的字符时将跳过delete()一个字符ii每当一个字符delete()'d时,它都需要保持在相同的索引处,因为下一个字符将向下滑动以占据刚好delete'd字符的索引增量i只有当不delete()“荷兰国际集团的人物。

尝试以下方法:

function freq(charToFind: char; username : String): Integer;
var 
  i, auxfreq: Integer;
begin
  auxfreq := 0;
  for i := 1 to Length(username) do
  begin
    if charToFind = username[i] then
      auxfreq := auxfreq + 1;
  end;
  //writeln(freq);    
  freq := auxfreq;         
end; 

function OddUserName(username : String): Boolean;
var
  usernameaux : String;
  length_usernameaux, i : Integer;
  Result : Boolean;
begin
  Result := false;
  usernameaux := username;
  length_usernameaux := Length(usernameaux);
  i := 1;
  while i <= length_usernameaux do
  begin
    if freq(usernameaux[i], usernameaux) > 1 then
    begin
      Delete(usernameaux, i, 1);
      length_usernameaux := length_usernameaux - 1;
    end else
    begin
      i = i + 1;
    end;
  end;
  // length_usernameaux is supposed to be the number of the distinct characters.
    
  {if length_usernameaux mod 2 <> 0 then // you will have to ignore this.
    Result := true; // odd}

  //writeln(usernameaux); 
  //writeln(length_usernameaux);
  OddUserName := Result; // ignore this too    
end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何计算字符串中不同的重复字符

来自分类Dev

计算不同的字符串对象实例

来自分类Dev

计算不同的字符串对象实例

来自分类Dev

是否可以计算O(n)中字符串中不同子字符串的数量?

来自分类Dev

PHP:计算字符串中的不同数字

来自分类Dev

计算字符串中字符的出现

来自分类Dev

计算字符串中的特定字符

来自分类Dev

计算字符串中的特定字符

来自分类Dev

计算字符串中的字符数

来自分类Dev

字符串在Java中何时是不同的对象?

来自分类Dev

计算字符串中的子字符串

来自分类Dev

计算字符串中字符串的出现

来自分类Dev

计算字符串中的字符串数

来自分类Dev

计算字符串中字符串出现的次数

来自分类Dev

在不同的字符串中查找相同的字符串

来自分类Dev

来自Pascal中字符串的格式化输入

来自分类Dev

C ++中Pascal字符串的数据布局

来自分类Dev

在 Pascal 中给出字符串类型时出错

来自分类Dev

从字符串数组中删除字符串对象

来自分类Dev

计算字符串中的单词数

来自分类Dev

计算字符串Java中的字母

来自分类Dev

计算字符串中图像的长度

来自分类Dev

计算字符串中的单词

来自分类Dev

计算字符串中重复的字母

来自分类Dev

计算字符串中的箭头

来自分类Dev

计算字符串中单词的字母

来自分类Dev

计算bash中字符串的长度

来自分类Dev

计算字符串变量中的对数

来自分类Dev

如何计算向量中的字符串?