句子编辑C++

Sentence editing C++

本文关键字:C++ 编辑 句子      更新时间:2023-10-16

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

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

但输出是:"这个",而不是"这是一个例句"

我的代码是:

#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];
        }
    }
}

如果你告诉我我的错误是什么以及如何解决它,那就太好了。提前谢谢。

使用 cin 会将每个空格分隔的单词视为单个输入,并且它只会存储this,因为提供了单个字符串。使用 cin.getline() 而不是 cin 来获取带有空格的输入。

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

问题出在这里:

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

当程序到达最后一个空格(即您要保留的空格)时,它将不符合a[i] != ' '条件并跳过该字符。 你想要的是:

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

我稍微修改了您的代码以删除运行空间.您也可以编辑以删除逗号。使用 std:: 字符串和 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;
}

让我们看看

#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]; }
    }
}

这不是更好或更有效的方法,但是,这应该可以完成工作。经过测试,并正常工作。

请注意,如果没有正确捕获 i+1 条件,您可能会陷入内存问题。

有两个问题。

第一个是使用运算符>>输入句子。此运算符仅输入空格中的符号。所以当你进入

"这是一个例句"

应用运算符的结果

cin >> a;

将是数组 A 将只包含单词"This"。代替这个运算符,你应该使用函数

cin.get( a, l );

第二个问题是 if 语句中的条件不正确。应该是

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

您也可以使用标准算法 std::unique_copy。例如

    std::unique_copy( a, a + std::strlen( s ), std::ostream_iterator<char>( std::cout ),
        []( char c1, char c2 ) { return ( c1 == ' ' && c1 == c2 ); } );