字符:字符以数值(ASCII码)存在电脑里,这个数字是二进制数
char ch=' 0 ',ch存的值是字符0,对应值48; char ch=0,ch存的值是数字0,对应值0
字符串 :字符串就是一个字符数组,只是在数组最后加了一个反斜杠\0,标志者读取结束
获取字符: ch=getch();不带回显,意思是你输入的值电脑接收到但不会显示 ( conio.h库文件)
ch=getche();带回显,意思是你输入一个他就接收并返回,并且不用回车
获取字符串: scanf(),格式转换符用%s,遇到\n获取停止,获取中遇到空格、tab认为需要获取内 容结束(刚开始就有空格的话会一直读到有非空格为止), 但是会有缓冲区溢出问 题,可以在%s中间加入限定长度,如%5s
gets ();无限获取字符串,遇到回车停止,但会将回车扔掉与scanf不同
fgets( str, 10 ,stdin) 可以规定输入的字符长度,不会出现溢出,但第十个就是\0
打印字符串:printf("%s", str) 后面不会自动换行
puts ( str ); 后面会自动加换行符
做题太晚,没时间写了
习题1
#include <stdio.h>
int main()
{
int num;
char arr[30]={"nihaoshijie"};
//printf("%c", arr[3]); 字符串在数组中也是一个字符一个地址在存
num=count(arr);
printf("%d个字母", num);
return 0;
}
int count(char *p)
{
int ret=0,i;
//printf("%c", p[3]);
for(i=0;;i++)
{
ret++;
p++;
printf("%c", *p);
if(*p=='\0')
break;
}
//printf("%d", ret);
return ret;
}
习题2
#include <stdio.h>
char *fun(char *p);
int main()
{
char arr[50]={"gdajih sjdn dv"}; //简单定义,已经实现功能
char *pum;
pum=fun(arr);
printf("%s", pum);
return 0;
}
char *fun(char *p)
{
int i;
while(*p!=' ') //循环单个字符读取
{
p++;
i++;
if(i>49) //当超过数组范围时指向空
p=NULL;
}
return p;
}
习题3
#include <stdio.h>
int main()
{
printf("请输入一串字母,不重复:");
char arr[30];
char *pum;
int i,j,count=0;
while((arr[i]=getchar())!='\n')
{
i++; //给数组赋值
count++; //统计输入字符数量
}
pum=arr;
puts(pum);
printf("%d个字符\n", count);
char temp;
for (i=0;i<count-1;i++)
{
pum=arr;
for(j=0;j<count-1-i;j++)
{
if(*pum>*(pum+1))
{
temp=*(pum+1); //实现交换功能
*(pum+1)=*pum;
*pum=temp;
}
pum++;
}
}
printf("%s",arr);
// puts(pum); 效果跟printf不一样
return 0;
}
习题4
#include <stdio.h>
int main()
{
char arr[50],b[50]={0};
char a[10]={0};
int i,ret;
printf("请输入一串连续字符\n");
scanf("%s",arr); //给数组赋值 ,调试发现scanf获取字符串时如果刚开始就有空格会跳过,直到读到字符,但再遇到空格就会停止
// puts(arr);
for(i=0;i<50;i++)
{
printf("%d", isdigit(arr[i]));
if((isdigit(arr[i]))==1&&(isdigit(arr[i+1]))==1) //判断是否为数字且连续
{
//b[i-1]='\0';
b[i]=arr[i];
b[i+1]=arr[i+1];
i+1; //这步很重要,不然无法存储两位数
}
}
printf("%\n");
for(i=0;i<50;i++)
printf("%c",b[i]); //打印出来看一下 ,到这是将所有连续数找出来了
return 0;
}