pascal - 在 Object pascal 中计算字符串中的不同字符
问题描述
美好的一天,我制作了这段代码,它应该计算字符串中的不同字符,我的代码已经过多个输入的测试,但它未能计算此输入中的字符:
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;
我衷心感谢您的帮助。
解决方案
如果您只需要获取某个字符串中不同字符的数量,您可以使用如下简单的方法:
function CountDistinctCharacters(InputString: string): Integer;
var I: Integer;
//String for storing all distinct characters
DistinctChars: string;
begin
//Loop trough every character in input string
for I := 1 to Length(InputString) do
begin
//Use Pos function to find position of specific character in DistinctChars string
//Function returns 0 if character is not found
if Pos(InputString[I], DistinctChars) = 0 then
begin
//If character isn't found in DistinctChars string add it to it
DistinctChars := DistinctChars+InputString[I];
end;
end;
//Finaly check the lenght of DistinctChars string to get the number of distinct character
//found and return it as function result
Result := Length(DistinctChars);
end;
如果您还需要输入字符串中存在哪些字符的信息,您可以代替使用本地DistinctChars
字符串变量将字符串作为 var pamaeter 传递给您的函数,如下所示:
//Pass external string as var parameter to your function in order to allow function to
//fill it with all distinct characters
function CountDistinctCharacters(InputString: string; var DistinctChars: string): Integer;
var I: Integer;
begin
//Loop trough every character in input string
for I := 1 to Length(InputString) do
begin
//Use Pos function to find position of specific character in DistinctChars string
//Function returns 0 if character is not found
if Pos(InputString[I], DistinctChars) = 0 then
begin
//If character isn't found in DistinctChars string add it to it
DistinctChars := DistinctChars+InputString[I];
end;
end;
//Finaly check the lenght of DistinctChars string to get the number of distinct character
//found and return it as function result
Result := Length(DistinctChars);
end;
但是,如果您还想知道输入字符串中有多少个字符,那么您将不得不为您的结果使用一些数据结构,该结构允许存储数据对,如 TDictionary 或记录数组,其中每条记录存储信息对(字符和出现次数)。
推荐阅读
- asp.net - 需要帮助识别数据库模式中的关联
- google-analytics - 如何使用记分卡从 Google Data Studio 中的 2 个不同页面划分用户数量?
- c# - Linq 语句中的“对象引用未设置为对象的实例”
- python - 尝试使用 smtplib 和 email.mime.multipart 从 python 发送电子邮件,收到错误“'Series' object has no attribute 'encode'”
- python - 从字典中打印值而不重复?
- android - PorterDuff.Mode.CLEAR 在画布上绘制黑色
- javascript - 反应原生 upi 付款被拒绝
- flutter - 如何仅在 Sqlite(或 Flutter 中的 sqflite)中获取今天的记录?
- javascript - 无法读取未定义的属性“排序”
- reactjs - 在 reactjs 中本地运行 webpack