替换句子

时间:2019-11-09 19:00:03

标签: c++

编写一个程序,该程序最多可以读取100个字符的句子,并输出该句子的空格已校正,字母也已校正为大写。换句话说,在输出语句中,两个或多个空格的所有字符串应压缩为单个空格。该句子应以大写字母开头,但不应包含其他大写字母。不用担心专有名称;如果将他们的首字母更改为小写,则可以接受。在将换行符和任意数量的空格压缩为单个空格的意义上,将换行符视为空白。假定句子以句号结尾,并且不包含其他句号。例如,输入

生命,宇宙和一切的答案是42。

应产生以下输出:

生命,宇宙和一切的答案是42。

#include<iostream>
#include<string>
using namespace std;

int main()
{
  const int MAX = 100;
  char sentence[MAX+1];
  string replace = "";
  int space = 0;
  cout<<"Enter a sentence";
  cin.getline(sentence,MAX+1);
  int i =0;
  while(i<MAX && sentence[i] != '\0' && sentence[i] != '.')
  {
    if(isspace(sentence[i]) || sentence[i] == '.')
    {
      space++;
    }
    else{
      space = 0;
    }
    if(space < 2)
    {
      replace += tolower(sentence[i]);
    }
  }

if(replace.length()>0)
{
replace.at(0) = toupper(replace.at(0));
if(replace[replace.length()-1]=='' && replace.length()==1){
replace=replace;
}
else if(replace[replace.length()-1]=='')
{
  replace[replace.length()-1]='.';
}
else if(replace.length()==MAX)
{
  replace[MAX-1]='.';
}
else
{
  replace+='.';
}
}

cout<<"The sentence to enter: "<<endl << sentence<<endl;
cout<<"How it should be: "<<replace<<endl;
return 0;
}

我的错误是:

Errors:
 warning: unknown escape sequence '\O'
      [-Wunknown-escape-sequence]
  while(i<MAX && sentence[i] != '\O' && sentence[i] != '.')
                                 ^~
] warning: empty character constant [-Winvalid-pp-token]
    if(isspace(sentence[i]) || sentence[i] == '')
                                              ^
 error: expected expression
 warning: empty character constant [-Winvalid-pp-token]
if(replace[replace.length()-1] == '' && replace.length()=='')
                                  ^
33:35: error: expected expression
 warning: empty character constant [-Winvalid-pp-token]
if(replace[replace.length()-1] == '' && replace.length()=='')

如何解决这些问题?

2 个答案:

答案 0 :(得分:0)

if(replace[replace.length()-1]=='' && replace.length()==1){
replace=replace;
}

我不知道您要在这里做什么,但是''不是有效字符,它是编译器错误的根源。我不知道您是否在寻找空字符\0或其他字符,但是由于整个表达式的结果都是replace=replace,因此上面的代码基本上是不需要的。

答案 1 :(得分:0)

Compilation results on GodBolt

您实际上并没有收到关于'\O'的错误-并且您的代码没有'\O' ...它有'\0`` (zero instead of big-Oh). '\0 actually has a meaning-C的终止符样式的字符串,其整数值为0;但是没有转义序列'\O'

此外,没有“空单个字符”之类的内容,因此''毫无意义。在编写代码时,请尝试在描述所要检查的内容时更加明确。例如,如果我要写:

bool my_string_ends_with_a_period = (not my_string.empty()) and (my_string.back() == '.');

我是说我在计算什么。您不必总是那么冗长,但是现在您的代码有点混乱,因此很难弄清您要做什么。