Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Pascal中带字符串类型的练习_String_Pascal - Fatal编程技术网

String Pascal中带字符串类型的练习

String Pascal中带字符串类型的练习,string,pascal,String,Pascal,(从德语翻译成英语) 在这个练习中我需要帮助: 线程:字符串处理用户可以对输入句子进行简单更改 条件 该程序显示一个菜单,供用户选择以下操作。这也会在操作完成后再次显示,直到用户终止程序(因此需要循环) 菜单包含以下项目,输入指定字母时应执行这些项目: 输入句子 B.确定字数 C.确定少于其序列字符的字符数 用大写字母替换句子中的所有单词 十、结束 如果用户输入不同的字母,则不会发生任何事情或再次输出菜单 如果选择菜单项A,则会发出提示以输入读取到字符串变量中的集合。此变量不能通过菜单项B、C和

(从德语翻译成英语) 在这个练习中我需要帮助:

线程:字符串处理用户可以对输入句子进行简单更改

条件

该程序显示一个菜单,供用户选择以下操作。这也会在操作完成后再次显示,直到用户终止程序(因此需要循环)

菜单包含以下项目,输入指定字母时应执行这些项目:

输入句子

B.确定字数

C.确定少于其序列字符的字符数

用大写字母替换句子中的所有单词

十、结束

如果用户输入不同的字母,则不会发生任何事情或再次输出菜单

如果选择菜单项A,则会发出提示以输入读取到字符串变量中的集合。此变量不能通过菜单项B、C和D的操作进行更改!可能地必须事先在另一个字符串变量中准备集合的副本

在菜单点B中,计算块中所有单词的数量。为了简单起见,您可以假设两个单词之间总是有一个空格。句子的开头和结尾没有空格。计算后输出字数(例如,“集合为4个字”)


如果用户执行菜单项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.