就要筛选出空格字符。
要筛选,就要对首字符做标记。
要所有空格,就要遍历。
~
②命令行
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
~
③定义函数
void fun(char *str)
{int i=0
char *p
/*标记:p=str表示指针指向字符串首地址做标记*/
for(p=str*p!='\0'p++)
/*遍历:不等于'\0'表示只要字符串不结束,就一直p++。*/
if(*p!=' ')str[i++]=*p
/*删除:如果字符串不等于空格,即有内容就存入字符串。等于空格就不储存,但是指针还是p++继续后移,跳过储存空格相当于删除。*/
}
void fun(char *str)
{int i=0
char *p=str
while(*p)
{if(*p!=' ')str[i++]=*p
p++}
/*除了for循环遍历,也可while循环遍历。注意 p++在if语句后,不然会漏掉第一个字符。*/
str[i]='\0'
/*循环完毕要主动添加'\0'结束字符串。*/
~
④主函数
viod main()
{char str[100]
int n
printf("input a string:")
get(str)
puts(str)
/*输入输出原字符串*/
fun(str)
/*利用fun函数删除空格*/
printf("str:%s\n",str)
遍历字符串,遇到空格,即进行删除。
可以使用第二个字符数组来保存结果,对空格不复制;也可以不使用第二个字符数组,而是采用后续字符覆盖空格字符的方式,达到删除效果。
以效率更高的第二种方法为例,代码如下:
void del_space(char * s){
char *p = s
do{
if(*s != ' ')*p++= *s
}while(*s++)
}
涨姿势啦, %*c格式符之前见都没见过,竟然表示跳过一个字符!
按你的代码逻辑在for循环中,首先读入一个字符,然后跳过一个字符,所以结果就是读入的是输入字符串的第奇数个字符:
对 aglh zhg zghh来说第奇数个字符分别是: a,l,空格,h,空格,g,h,刚好是输出的几个字符。
要删除输入字符中的空格不应该用%*c, 而应该读入后判断读入的字符是否为空格,如果是空格则继续,否则才将其赋值到数组内。
#include <stdio.h>int main()
{
char a[20], c
int i=0
while(i<20)
{
scanf("%c", &c)
if(c==' ')
continue
a[i++]=c
printf("%c", c)
}
return 0
}