String类型(从德国翻译成英文) 我需要在这个练习帮助:Exercice与帕斯卡尔
主题:字符串处理,用户可以对输入的句子简单的更改。
条件
程序显示供用户选择以下动作的菜单。在操作完成之后,这也会再次显示,直到用户终止程序(因此需要循环)。
该菜单包含以下项目,进入指定的信时,应执行:
A.输入句子
B.确定单词的数量
C.确定小于其序列字符的字符数
D.用句子中的所有单词替换其大写字母首字母
X.结束
如果用户输入不同的字母,则不会发生任何事情或菜单再次输出。
如果选择了菜单项A,则会发出提示以输入一个读入字符串变量的集合。这个变量不能被菜单项B,C和D的操作改变!有可能。必须预先在另一个字符串变量中准备该集合的副本。
在菜单点B中,块中所有单词的数量将被计数。为了简单起见,你可以假设两个单词之间总是有一个空格。在句子的开头和结尾没有空格。在计算之后输出字数(例如“The set is 4 words”)。
如果用户执行菜单项C,则逐个字符遍历该集合,并对每个字符检查它是否小于其尾随字符。这里是一个简单的字符比较(你也可以直接写''''<'d')。然后输出如此找到的字符数(例如,“在小于尾随字符的句子中找到13个字符”)。
在菜单项D中,句子被遍历并且其中包含的每个单词都被其大写首字符替换。大写当然只有在第一个字符是字母时才会生成,否则字符保持不变。你可以假定句子从不以空格开始或结束。在两个单词之间总是有一个空格,所以它应该在初始字母之间。例如,从“123好心情”变成“1 G L”。
这里不允许建立一个完整的新的字符串!相反,你应该在pos,copy,length,delete和insert的原始语句的副本上循环工作!禁止在字符串的开头或结尾“收集”所有的字符;这些应该直接插入到相应单词位置的字符串中!
此外,字符串不能在菜单点D访问,因为字符串例程的工作将在此处明确实践。菜单项B,C和D只有在已经输入记录的情况下才可以选择。否则,在菜单中输入B,C或D时不会发生任何事情或输入故障信息,并再次输出菜单。
对菜单项B,C或D的每次调用将始终在由用户输入的原始集合上工作,而不是在已被先前执行的菜单项目更改的集合上工作!
通过再次输入菜单项A,输入的块可以被新的覆盖。
用'X'表示用户可以终止程序。
无论使用何种预定义的字符串函数,都不要使用困难的循环等来编写它!但是,禁止使用strreplace或reverseString函数!
这里是我工作到现在,我只有用部分d问题:
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
此q似乎与您的https://stackoverflow.com/questions/44247115/exercise-with-type-string-in-pascal非常相似,但增加了一些代码,与SO更适合。项目D是什么造成你的困难?通常,学生发现将输入分解成单词是困难的部分。大多数pascal实现包括将字符串转换为大写或小写的函数,并且使用它们是微不足道的。你在使用哪种帕斯卡尔实现? – MartynA
既然已经关闭,我无法添加评论。 我在继续删除每个单词中的字母而不删除第一个字母并结束“重复”功能方面存在问题 –
我想我已经想出了如何在每个单词中删除字母(从倒数第二个到最后一个),但我仍然不知道如何“结束”重复功能 –