句子编辑C++
Sentence editing C++
我是编程新手,我必须制作一个程序,您可以在其中输入一个句子并删除任何重复的字符,如空格,逗号等。所以我的想法是只打印符合我标准的字符。但是我遇到了这样的问题:
输入:"这是(例如 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 ); } );
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 编辑文件中的文本
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- SetDlgItemInt 不会更改嵌入资源的编辑框
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- C++,Qt:仅在双击后编辑qtablewidget项目
- 编辑字符串以包含括号 c++ 之间的变量
- Arduino函数无法编辑数组
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- "未定义对'WinMain@16'的引用"gcc 编辑器中的错误
- C++MFC编辑框处理双击
- 是否可以使用指针访问变量以避免直接编辑变量?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 在 c++ 中编辑注册表项
- 无法将行编辑中的文本打印到 Qt C++ 中的标签
- 尝试使用 CMake 和 MinGW64 进行构建时出现多个编辑错误
- 如何从C++而不是虚幻编辑器中添加静态网格体组件的值?
- UE4 - Visual Studio在我从编辑器添加新的c ++文件后无法打开任何源文件 - UBT_COMPILED
- Qt如何将行编辑连接到进度条
- 使用 bash 脚本和测试处理进行代码编辑