方法一:利用cin在输入时不会读入空格,tab,回车。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
cout<<s<<" ";
}
return 0;
}
方法二:利用标识符flag来标记上一个输出字符是否为空格,如果是,那么本次字符如果还是空格的话不输出。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
int flag=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!=' ')
{ cout<<s[i];
flag=0;}
else if(flag==0)
{
cout<<" ";
flag=1;
}
else
continue;
}
return 0;
}
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main()
{
string s;
char a=’ ‘;
getline(cin,s);
for(int i=0;i<s.size();i++)
{
if(s[i]!=a)
cout<<s[i];
else if(s[i]==a&&s[i-1]!=a)
cout<<s[i];
else
{}
}
return 0;
}
萌虎玩觉得很赞👍
比如: hello world , 当条件触发时, 说明我要拼接下一个字母才可以, 所以+ ‘ ‘ + s[++i], 那为什么++i呢, 这句话我想要实现的效果是拼接一个空格再拼接s[i + 1], 但是我拼接s[i + 1]然后不++i的话, 下一个循环就到了i+1的位置了, 这个字母其实我已经加过了,再加进去就错了, 所以我写成了++i
谢谢大佬解答,感谢!!懂了
#include [HTML_REMOVED]
#include [HTML_REMOVED]
using namespace std;
int main(){
}
遇到连续空格时消去前一个,保留最后一个空格
if判断
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main(){
string a;
getline(cin,a);
for(int i=0;i<a.size();i++){
if((int)a[i]==32&&(int)a[i+1]==32) continue;
else cout<<a[i];
}
return 0;
}
究极简化版一直没搞懂while(cin>>s)是什么意思,可以解释一下嘛qaq
cin >> s; 就是在读入数据 当没有可读入数据的时候 cin返回0还是faults来着 就不进循环了
我去,牛
帅死了
%%%
第一个还是不懂 这个while循环会停止吗 cin进去的是每次要遇到空格的那一小串字符码
while(cin>>a)是连续读入中比较常用的方法,cin遇到空格结束\换行\tab结束,当没有输入的时候好像是获得EOF表示文件结束while停止。每次读入的是空格之间的内容
问一下,那是怎么判断没有输入了呢,怎么终止的还是没太懂,求指导
tab不算是空格吧?
方法一输出的时候为什么不会输出一个字母+一个空格呢?
方法一给我气死,我还想着怎么跨过空格
你好厉害啊
方法2的文末空格去不了吧
法一确实厉害
#include[HTML_REMOVED]
using namespace std;
int main()
{
string s;
getline(cin,s);
string s1=” “;s1+=s[0];
for(int i=1;i<s.size();i)
{
if(s[i-1]!=’ ‘||s[i]!=’ ‘)
s1+=s[i];
}
for(int i=1;i<s1.size();i)
cout<<s1[i];
return 0;
}
这样会不会有个问题就是如果英文句号前面有空格,它也会输出一个
厉害