编写一个程序,该程序最多可以读取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()=='')
如何解决这些问题?
答案 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() == '.');
我是说我在计算什么。您不必总是那么冗长,但是现在您的代码有点混乱,因此很难弄清您要做什么。