我一直试图让这项工作暂时搁置一段时间。 我需要为学校项目制作一个程序,它接受一个字符串并在其中计算对称的单词。
里面应该有句子,但任何事都有帮助。无论我尝试什么方法,我似乎无法让它工作。你能救我一下吗?
编辑:我当前的代码
program rocnik;
var text:string;
word,drow:string[10];
i,j,k,p1:integer;
space,sym:boolean;
begin
p1:=0;
write('Enter text: ');readln(text);
if text<>'' then
begin
for i:=1 to length(text) do
begin
k:=0;
if space then
begin
j:=0;
space:=false;
end;
sym:=true;
if text[i]<>' ' then
begin
j:=j+1;
word[j]:=text[i];
end
else space:=true;
if space then
begin
space:=false;
for j:=1 to length(word) do
begin
k:=k+1;
drow[k]:=word[j];
if drow[k]<>word[j] then sym:=false;
end;
end;
if space and sym then p1:=p1+1;
end;
end
else writeln('You didnt enter any text');
writeln('there are ',p1,' symmetrical words in text');
readln;
end.
答案 0 :(得分:0)
您尝试一次完成所有事情!编程通常是将一个大问题分解为多个简单问题的练习。
你真的只需要检查每个单词末尾的对称单词。我建议有一个代表当前单词的字符串。当您遇到输入中的每个字符时,请查看它是否为空格。如果它不是空格,则将该字符附加到currentWord
字符串变量。
每次遇到空格时,都应检查currentWord
是否对称,然后清除currentWord
变量。
您的代码会尝试单独跟踪单词的长度。这是在寻找错误。您可以使用length
函数向字符串询问其当前长度。
所以你的代码应该归结为:
请注意,这是伪Pascal - 我试图不给你一个复制粘贴的答案,这样你就可以学习
currentWord := ''
for each character do
begin
if this character is not a space then
add the character to the currentWord
else
if wordIsSymmetrical(currentWord) then
print word or add to count as needed
end
currentWord := ''
end
end
if currentWord <> '' then
if wordIsSymmetrical(currentWord) then
print word or add to count as needed
end
end
...并添加一个名为wordIsSymmetrical
的函数,它只检查我们传递给它的字符串参数。
请注意,最后您可能会遇到一个没有遇到空格的单词。您可以再次使用wordIsSymmetrical
进行检查。
这看起来更容易吗?