如何在字符串中找到对称的单词?
How to find symmetrical words in string?
一段时间以来,我一直在努力使这项工作奏效。
我需要为学校项目制作一个程序,它接受一个字符串并计算其中的对称单词。
里面应该有句子,但有什么帮助。无论我尝试哪种方法,我似乎都无法让它发挥作用。你能帮帮我吗?
编辑:我当前的代码
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.
你尝试一次完成所有事情!编程通常是将一个大问题分解为多个更简单的问题的练习。
你真的只需要检查每个单词末尾的对称单词。我建议有一个代表当前单词的字符串。当您遇到输入中的每个字符时,看看它是否是 space。如果它不是 space,则将该字符附加到 currentWord
字符串变量。
每次遇到space,你应该检查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
的函数,它只检查我们传递给它的字符串参数。
请注意,最后你可能有一个词没有遇到space。在这里你可以再次使用 wordIsSymmetrical
检查 .
这似乎更容易做到吗?
一段时间以来,我一直在努力使这项工作奏效。 我需要为学校项目制作一个程序,它接受一个字符串并计算其中的对称单词。
里面应该有句子,但有什么帮助。无论我尝试哪种方法,我似乎都无法让它发挥作用。你能帮帮我吗?
编辑:我当前的代码
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.
你尝试一次完成所有事情!编程通常是将一个大问题分解为多个更简单的问题的练习。
你真的只需要检查每个单词末尾的对称单词。我建议有一个代表当前单词的字符串。当您遇到输入中的每个字符时,看看它是否是 space。如果它不是 space,则将该字符附加到 currentWord
字符串变量。
每次遇到space,你应该检查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
的函数,它只检查我们传递给它的字符串参数。
请注意,最后你可能有一个词没有遇到space。在这里你可以再次使用 wordIsSymmetrical
检查 .
这似乎更容易做到吗?