可以参考下面的代码:
#include "stdio.h"
void main()
{
char s[]="I am a teacher!";
int i,j;
for(i=0;s[i];i++)
{
if(s[i]==32&&s[i+1]==32)/*如果字符串中第i和i+1个是空格,就运行if中的语句*/
for(j=i;s[j];j++) {s[j]=s[j+1];i=0;}/*此句是把2个空格换成一个,然后把空格之后的内容前移*/
}
printf("%s\n",s);
}
扩展资料:
1、for循环小括号里第一个“;”号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。
“;”号之间的条件表达式是一个关系表达式,其为循环的正式开端,当条件表达式成立时执行中间循环体。
2、if语句中的“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式。其中最直观、最容易理解的是关系表达式。所谓关系表达式就是两个数值进行比较的式子。
参考资料来源:百度百科-for循环
参考资料来源:百度百科-if语句
思路:通过gets输入字符串后就开始遍历字符串,如果字符不是空格直接输出并向后遍历,如果是空格输出一个空格,并向后遍历直到不是空格为止,不作输出处理。
参考代码:
#include
int main()
{
int i;
char a[100];
gets(a);
for(i=0;a[i]!='\0';){
if(a[i]==' '){//如果是空格输出一个空格,并向后遍历直到不是空格为止,中间不输出
printf(" ");
while(a[i]==' ') i++;
}
else{//如果字符不是空格直接输出并向后遍历
printf("%c",a[i]);
i++;
}
}
printf("\n");
return 0;
}
/*
输出:
I am a teacher
I am a teacher
*/
vc6.0下测试通过
望楼主采纳
#include
#include
void main()
{
char s[]="i am a teacher!";
char ss[20];
int i,j=0;
for(i=0;i
if(!((s[i]==32)&&(s[i+1]==32)))
//当s字符串不是连续两个空格时,拷贝字符到ss
//换而言之就是,当有两个空格时,忽略掉之前的空格
ss[j++]=s[i];
}
ss[j]='\0';//添加字符串结束符
printf("%s",ss);
}
TC2.0调试通过,楼主请看
#include "stdio.h"
void main()
{
char s[]="I am a teacher!";
int i,j;
for(i=0;s[i];i++)
{
if(s[i]==32&&s[i+1]==32)/*如果字符串中第i和i+1个是空格,就运行if中的语句*/
for(j=i;s[j];j++) {s[j]=s[j+1];i=0;}/*此句是把2个空格换成一个,然后把空格之后的内容前移*/
}
printf("%s\n",s);
}
//把一个字符串复制到另外一个字符串。如果上一位置是空格,则buf不移动位置
char name[]=" am a teacher!";
char buf[100];
int j=0;
memset(buf,0,100);
for(int i=0;i
if(name[i]==' ')
{
buf[j]=name[i];
if (name[i-1]!=' ')
j=j+1;
}
else
{
buf[j]=name[i];
j=j+1;
}
}
buf[j]=0;
printf("%s",buf);