Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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
C++ 替换句子_C++ - Fatal编程技术网

C++ 替换句子

C++ 替换句子,c++,C++,编写一个程序,可以读入一个最多100个字符的句子,并输出空格正确的句子和大写字母正确的句子。换句话说,在输出语句中,两个或更多空格的所有字符串都应该压缩为一个空格。句子应以大写字母开头,但不应包含其他大写字母。不要担心专有名称;如果他们的第一个字母改为小写,这是可以接受的。将换行符视为空白,即换行符和任意数量的空白压缩为单个空白。假设句子以句号结尾,不包含其他句号。例如,输入 生命、宇宙和一切的答案是42 应产生以下输出: 生命、宇宙和一切的答案是42 #include<iostream&

编写一个程序,可以读入一个最多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;
}
#包括
#包括
使用名称空间std;
int main()
{
常数int MAX=100;
字符句子[MAX+1];
字符串替换=”;
int空间=0;
库特
我不知道您想在这里做什么,但
'
不是有效字符,是编译器错误的来源。我不知道您是否在查找空字符
\0
或其他内容,但由于整个表达式导致
替换=替换
,因此基本上不需要上述代码。

实际上,您没有收到关于
'\O'
-的错误,并且您的代码没有
'\O'
..它有
'\0```(零而不是大Oh)。'\0
-C样式字符串的终止字符,其整数值为0;但是没有转义序列
'\O'

此外,没有“空单字符”这样的东西,因此
是没有意义的。在编写代码时,在描述您要检查的内容时,请尽量更加明确。例如,如果我要编写:

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

我说的是我在计算什么。你不必总是这么冗长,但现在你的代码有点凌乱,所以很难弄清楚你想做什么。

空字符常量
应该是显而易见的。你不能通过将两个单引号背对背来获得空字符。如果允许使用
std::string
为什么要使用
字符句子[MAX+1];
std::string句子;
会是一个更好的选择。@drescherjm我应该用什么来代替空字符您需要从字符串中删除字符(并将字符串向左移动)不要尝试将空字符放入其中。
\O
\0
if(replace[replace.length()-1]=='' && replace.length()==1){
replace=replace;
}
bool my_string_ends_with_a_period = (not my_string.empty()) and (my_string.back() == '.');