首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
给定字符串s, 要求把s中多于一个的连续空压缩成一个空格,并
[问答题]
给定字符串s, 要求把s中多于一个的连续空压缩成一个空格,并将连续的非空格字符串倒序打印出来,例如,给定"abc def efg",打印"cba fed gfe"
添加笔记
求解答(0)
邀请回答
收藏(19)
分享
纠错
6个回答
添加回答
1
wu_wang_chu_xin
//使用栈来实现
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<char> s;
int flag=0;
char ch=getchar();
while(1)
{
if(ch!='\n')
{
if(ch!=' '&&flag==0)
{
s.push(ch);
}
else
{
if(ch==' '&&flag==0)
{
while(s.size()!=0)
{
cout<<s.top();
s.pop();
}
cout<<" ";
flag=1;
}
else
{
if(ch!=' '&&flag==1)
{
flag=0;
s.push(ch);
}
}
}
ch=getchar();
}
else
{
while(s.size()!=0)
{
cout<<s.top();
s.pop();
}
cout<<endl;
break;
}
}
system("pause");
return 0;
}
发表于 2017-03-18 20:26:19
回复(0)
1
xxj
说明:两个循环,第一个循环去掉连续空格,第二个循环倒叙输出
void RPutString(char * src,int n)
{
if(src==null&&n<2) return;
char * first = src;
char * second = src;
for(int i=0;i<n;i++)
{
//second 先找到第一个非空格字符串
if(*second != ' ')
first++ = second;
else//*second==' '
if(first != src && *(first-1) != ' ')
first++ = ' ';
++second;
}
char * Rfirst = NULL;
//用于指向新的末尾字符
//设置结尾标记
if(*first==' ')
{
*first='\0';
Rfirst = first-1;
}
else
{
*(first+1)='\0';
Rfirst = first;
}
//然后倒叙排列
char temp;
first = str;
while(Rfirst > first)
{
temp = Rfirst;
Rfirst = first;
first = temp;
++first;
--Rfirst;
}
//到此完成,最终字符串中头尾都非空格。
}
发表于 2014-11-27 10:01:41
回复(0)
0
小六帅帅
#include <iostream>
#include <stack>
using namespace std;
void main()
{
int i;
int s;//字符串长度
//int sign=0;
char a[100];
cin.get(a,100);
s=strlen(a);
stack <char>stk;
for(i=0;i<s;i++)
{
if(a[i]!=' ')
{
stk.push(a[i]);
}
else
{
while(!stk.empty())
{
cout<<stk.top();
stk.pop();
}
if(a[i]==a[i+1]&&a[i]==' ')
{}
else
cout
<<
" "
;
}
}
while
(!stk.empty())
{
cout
<<stk.top();
stk.pop();
}
cout
<<
endl
;
}
发表于 2019-03-24 19:51:16
回复(0)
0
谁占用了我的名字
import java.util.Scanner;
import java.util.Stack;
public class google1 {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String s=sc.nextLine();
Stack<Character> stack=new Stack<Character>();
String result="";
//先处理头部和尾部
int n=s.length();
boolean last=false;
if(s.charAt(0)==' ') result+=' ';
if(n-1!=0 && s.charAt(n-1)==' ') last=true;
s=s.trim();
boolean flag=false;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)!=' ')
{
stack.push(s.charAt(i));
if(flag==true) flag=false;
}else if(s.charAt(i)==' ' && flag==false)
{
flag=true;
while(!stack.isEmpty())
result+=stack.pop();
result+=" ";
}
else
continue;
}
while(!stack.isEmpty())
result+=stack.pop();
if(last) result+=" ";
System.out.println(result);
}
}
}
发表于 2018-01-06 20:56:34
回复(0)
0
CCoder
<pre class="prettyprint lang-cpp">string Zipper(string s){ string s1=""; string s2=""; int i=0,j=0,k=0,count=0; while(s[i]){ s1[i++]=s[j++]; if(s[j]==" ")j++; } for(i=0;i<s1.length();i++){ if(s1[i]==' '){ for(k=count;k<i;k++) s2[k]=s1[i-1-K]; s2[i]=" "; count=i+1; } } }</pre> <br />
发表于 2015-08-16 10:05:25
回复(0)
0
帅哥
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[100][100];
int i = 0;
while(cin >> a[i++]);
for(int j = 0; j < i ; j ++)
{
for(int k = strlen(a[j]) - 1; k >= 0; k --)
{
cout << a[j][k];
}
cout << ' ';
}
return 0;
}
发表于 2015-07-31 16:33:00
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
谷歌
字符串
来自:
Google2012笔试卷
上传者:
**二楞呆
难度:
6条回答
19收藏
10800浏览
热门推荐
相关试题
普通PC机器上四字节有符号整数能表...
谷歌
编程基础
评论
(3)
运行下面这段C语言程序之后,输出在...
谷歌
C++
C语言
评论
(66)
按照OSI模型的层次概念,下列几个...
谷歌
网络基础
评论
(5)
来自
Google2012笔试卷
一棵树(>=3个节点)最少需...
谷歌
树
评论
(16)
来自
Google2012笔试卷
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题