c语言问题 求解释 越详细越好
发布网友
发布时间:2022-05-18 08:44
我来回答
共5个回答
热心网友
时间:2023-10-12 17:19
不好意思,delete_space函数忘记考虑一些情况了,稍稍修改下:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
fun (char *p)
{
int i,t;
char c[80];
for(i=0,t=0; p[i]; i++)//p[i]即p[i]!='\0'
if(! isspace( *(p+i) ) ) //isspace库函数原型:int isspace( int c),若c是空格,则返回1,否则返回0
c[t++]=p[i];//*(p+i)即p[i],若p[i]不是空格,则将p[i]复制到c[t]中,并t自增1
c[t]='\0';//字符串结尾标志
strcpy(p,c); //这里新的字符串c是不包含空格的,从而实现了去除字符串p中所包含的空格
}
//下面这个函数也完全符合要求:
void delete_space(char *p)
{
int i,j;
for(i=0;i<strlen(p);i++)
if(p[i]==' ' || p[i]=='\t' || p[i]=='\n')//就这里修改了下
for(j=i;j<strlen(p);j++)
p[j]=p[j+1];
}
main()
{
char c,s[80];
int i=0;
printf("Input a string:");
c=getchar();
while(c!='#')
{
s[i]=c;
i++;
c=getchar();
}
s[i]='\0';
//fun(s);
delete_space(s);
puts(s);
}
哪里不懂可追问:
热心网友
时间:2023-10-12 17:19
t[sl+i]
=
s[sl-i-1];
实现把s中的字符按逆序连接到t串的后面。
i初值为0,sl-i-1为sl-1,s[sl-1]就是s字符串中最末一个字符。
随着i增大,sl-i-1会减小,即对于s字符串从末往前读取字符。
t[sl+i]即随着i增大,从t[sl]开始依次反向写入s中的字符。
scanf("%s",
s);对于字符串,字符串名就是指针,表示字符串地址,不用使用取地址运算符&。
热心网友
时间:2023-10-12 17:20
if选择结构后面括号里面的表达式(!isspace(*(p+i)))就可以实现空格的删除
isspace 是测试参数是否是空格、制表符或换行符的函数,用前先要调用头文件
#include<ctype.h>
例如
if(!isspace(ch)) /*ch是要判断的字符*/
exit(0);
若判断字符ch为空空格、制表符或换行符,程序退出,若不是则继续。
热心网友
时间:2023-10-12 17:20
if(!isspace(*(p+i))) c[t++]=p[i];
如果不是空格,就把P[i]给C[t],,最后在吧C copy给P
热心网友
时间:2023-10-12 17:21
直接删就可以了