String Pascal中带字符串类型的练习
(从德语翻译成英语) 在这个练习中我需要帮助: 线程:字符串处理用户可以对输入句子进行简单更改 条件 该程序显示一个菜单,供用户选择以下操作。这也会在操作完成后再次显示,直到用户终止程序(因此需要循环) 菜单包含以下项目,输入指定字母时应执行这些项目: 输入句子 B.确定字数 C.确定少于其序列字符的字符数 用大写字母替换句子中的所有单词 十、结束 如果用户输入不同的字母,则不会发生任何事情或再次输出菜单 如果选择菜单项A,则会发出提示以输入读取到字符串变量中的集合。此变量不能通过菜单项B、C和D的操作进行更改!可能地必须事先在另一个字符串变量中准备集合的副本 在菜单点B中,计算块中所有单词的数量。为了简单起见,您可以假设两个单词之间总是有一个空格。句子的开头和结尾没有空格。计算后输出字数(例如,“集合为4个字”)String Pascal中带字符串类型的练习,string,pascal,String,Pascal,(从德语翻译成英语) 在这个练习中我需要帮助: 线程:字符串处理用户可以对输入句子进行简单更改 条件 该程序显示一个菜单,供用户选择以下操作。这也会在操作完成后再次显示,直到用户终止程序(因此需要循环) 菜单包含以下项目,输入指定字母时应执行这些项目: 输入句子 B.确定字数 C.确定少于其序列字符的字符数 用大写字母替换句子中的所有单词 十、结束 如果用户输入不同的字母,则不会发生任何事情或再次输出菜单 如果选择菜单项A,则会发出提示以输入读取到字符串变量中的集合。此变量不能通过菜单项B、C和
如果用户执行菜单项C,将逐个字符遍历集合,并检查每个字符是否小于其尾部字符。这里是一个简单的字符比较(你也可以直接写一些类似“1”的东西,我很高兴你找到了自己的解决方案,做得很好 当你这么做的时候,我一直在写下面的答案,就像我 完成后,我想我会把它贴在这里,给你展示另一种方式 从字符串中提取单词的问题。有 有几十种方法可以完成这项任务,但我希望我使用的方法是公平的 容易理解 可能您遇到问题的原因是您的字符串索引 表达式有点太复杂了。我打赌如果你在6个月后回到你的代码 你需要一段时间才能弄清楚它应该做什么,而且时间更长 判断它是否真的在做。避免类似问题的关键 就是把你的代码分解成更容易理解和理解的卡盘 来测试。因此,不要只是告诉你你的
重复
条件应该是什么,
我会告诉你一个更容易遵循的方法
首先要做的是从输入中提取一个单词
我写的是一个函数,ExtractFirstWord
,它返回
输入字符串,无论输入是否包含空格,也返回
一个余数
字符串,它是剩余的字符串或第一个余数之后的输入字符串
word(以及紧跟其后的所有空格都已删除)。此操作已完成
使用一些简单的while
循环,这些循环被编码为跳过前导空格
然后从后面的非空格字符构建一个字符串
代码
const
lz='';
变量
Satz:字符串;
第一个字:字符串;
余数:字符串;
函数ExtractFirstWord(constInputStr:String;变量余数:String):String;
变量
P:整数;
WordStart:Integer;
开始
结果:='';
P:=1;
//以下内容跳过InputStr开头的任何空格
虽然(P该q看起来与您的非常相似,但添加了一些代码,这更适合SO。D项是什么给您带来困难的?通常,学生会发现将输入拆分为单词是困难的部分。大多数pascal实现包括将字符串转换为大写或小写的函数,使用它们是琐事l、 您使用的是哪个pascal实现?由于该实现已关闭,我无法添加注释。我无法在不删除第一个字母的情况下继续删除每个单词中的字母,并且无法结束“重复”功能。我想我已经知道如何删除每个单词中的字母(从第二个到最后一个),但我仍然不知道如何删除“结束”重复函数我完成了,NB:lz=space:'D':开始索引:=2;插入(lz,Satz,length(Satz)+1);计数:=(pos(lz,Satz));重复删除(Satz,index,(count-index));索引:=索引+2;计数:=pos(lz,copy)(Satz,index,(length)(Satz)-index+1)))+index-1;直到index>count;writeln(大写(Satz));end事实上我们只能使用insert、copy、delete、pos、length。使用其他过程,字符串访问(如Satz[i])声明一个新的字符串类型变量是被禁止的,我们还没有学会如何使用像“ExtractFirstWord”这样的函数。
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
const
lz = ' ';
var
Satz: string;
Buchstabe: char;
i, p, j, zaehler2, index, count: integer;
writeln('A) Write Sentence');
readln(Satz);
'D':
begin
index := 2;
insert(lz, Satz, length(Satz)+1);
count := (pos(lz,Satz));
repeat
delete(Satz, index,(count - index));
index := index + 2;
count := pos(lz,copy(Satz,index,(length(Satz)-index)))+index-1;
until ;
writeln(uppercase(Satz));
end
const
lz = ' ';
var
Satz: string;
FirstWord : String;
Remainder : String;
function ExtractFirstWord(const InputStr : String; var Remainder : String) : String;
var
P : Integer;
WordStart : Integer;
begin
Result := '';
P := 1;
// The following skips over any spaces at the start of InputStr
while (P <= Length(InputStr)) and (InputStr[P] = lz) do
Inc(P);
// Now we know where the first word starts
WordStart := P;
// Now we can get the first word, if there is one
while (P <= Length(InputStr)) and (InputStr[P] <> lz) do
Inc(P);
Result := Copy(InputStr, WordStart, P - WordStart);
Remainder := Copy(InputStr, P, Length(InputStr));
// the following is one way to remove spaces at the start of Remainder
while (Length(Remainder) > 0) and (Remainder[1] = lz) do
Delete(Remainder, 1, Length(lz));
// instead you could do something simlar to the first `while` loop above
end;
begin
Satz := ' cat dog ';
repeat
FirstWord := ExtractFirstWord(Satz, Remainder);
FirstWord := UpperCase(FirstWord);
Satz := Remainder;
writeln('First word: ', FirstWord, ' remainder: ', Remainder);
until Remainder = '';
readln;
end.