C语言 输入一个字符串,删除中间多余的空格

2024-11-15 21:53:48
推荐回答(5个)
回答1:

可以参考下面的代码:

#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语句

回答2:

思路:通过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
*/

回答3:

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);
}

回答4:

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);
}

回答5:

//把一个字符串复制到另外一个字符串。如果上一位置是空格,则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);