C++ 句子编辑C++;

C++ 句子编辑C++;,c++,string,char,C++,String,Char,我是编程新手,我必须制作一个程序,在其中输入一个句子并删除任何重复字符,如空格、逗号等。所以我的想法是只打印符合我标准的字符。但我遇到了这样的问题: 输入:“这是(例如5个空格)一个(2个空格)示例(3个空格)句子” 但是输出是:“This”,而不是“thisasample句” 我的代码是: #include <iostream> #include <string.h> using namespace std; int const l=200; int main ()

我是编程新手,我必须制作一个程序,在其中输入一个句子并删除任何重复字符,如空格、逗号等。所以我的想法是只打印符合我标准的字符。但我遇到了这样的问题:

输入:“这是(例如5个空格)一个(2个空格)示例(3个空格)句子”

但是输出是:“This”,而不是“thisasample句”

我的代码是:

#include <iostream>
#include <string.h>

using namespace std;

int const l=200;
int main ()
{
    char a[l];
    cin >> a;

    int d;

    d=strlen (a);

    int i = 0;
    for(i = 0; i < d; i++)
    {
        if(a[i] != ' ' && a[i+1] != ' ')
        {
            cout<<a[i];
        }
    }
}
#包括
#包括
使用名称空间std;
int const l=200;
int main()
{
字符a[l];
cin>>a;
int d;
d=斯特伦(a);
int i=0;
对于(i=0;icout问题在于这种情况:

 if(a[i]!=' ' && a[i+1]!=' ')
当程序到达最后一个空格(即您要保留的空格)时,它将使
a[i]!=''条件失败并跳过该字符。您需要的是:

 !(a[i] == ' ' && a[i+1] == ' ')

我稍微修改了你删除运行空格的代码。你也可以编辑删除逗号。使用std::string和getline函数读取字符串,因为>>只读取一个空格。我希望这能有所帮助

#include<cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int const l=200;
int main() {
        string a;
        getline(cin,a);
        int d;
        d=a.size();
        int i = 0;
        for(i = 0; i < d; i++) {
                if(a[i]==' ') {
                        cout<<" ";
                        while(a[i]==' ')
                                ++i;
                }
                cout<<a[i];
        }
        cout<<endl;
}
#包括
#包括
#包括
使用名称空间std;
int const l=200;
int main(){
字符串a;
getline(cin,a);
int d;
d=a.尺寸();
int i=0;
对于(i=0;i
#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string a;
    getline(cin, a);
    for(int i=0;i < a.length();i++)
    {
        if( i+1 < a.length())
        {
            bool whatIwant = !(a[i] == ' ' && a[i+1] == ' ');
            if(whatIwant){ cout<<a[i]; }
        }
        else { cout<<a[i]; }
    }
}
#包括
#包括
使用名称空间std;
int main()
{
字符串a;
getline(cin,a);
对于(int i=0;i如果(whatIwant){cout有两个问题

第一个是使用运算符>>输入句子。此运算符只输入符号或空白。因此,当您输入

“这是一个示例句子”

应用算子的结果

cin >> a;
数组a将只包含单词“This”。您应该使用函数而不是此运算符

cin.get( a, l );
第二个问题是if语句中的条件不正确

    if ( a[i] != ' ' || a[i+1] != ' ' )
    {
        cout<<a[i];
    }
if(a[i]!=“a[i+1]!=”)
{

CUT

使用<代码> CIN < /代码>将每个空间分隔的单词作为一个单独的输入,它将只存储<代码> <代码>作为一个单独的字符串。使用<代码> CIN。GETLION()/<代码>而不是<代码> CIN < /代码>以空格输入。

char a[l];
cin.getline(a, l);

使用
\include
和…aaaa并缩进您的代码。使用
std::size\u t
表示大小。顺便说一句,您的问题是
std::istream::operator>
在遇到一些空白之前只输入。不要使用它。使用
std::cin.getline()
相反。这只是问题的一部分。这有效吗?在for循环中修改i而在for循环中修改i对我来说似乎不是一个好的做法。它确实有效。事实上,修改i可以提高效率,因为运行空间会被跳过,不会重复两次。只要[i]不是作为while循环结尾的空格,我打印字符以确保不会遗漏任何字符。'while(a[I]='')++I'是错误的'Ichar a[l]; cin.getline(a, l);