字处理学习总结
定义二维数组
类型标识符数组名[常量表达式][常量表达式]
例:floata[3][4],b[5][10];
数组元素,以a数组为例
数组a共有3行,4列元素,均存储float型数据
行下标:0-2,共3行
列下标:0-3,共4行
二维数组元素的引用
例:二维数组行和列元素互换后存到另一个二维数组中
#include<stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("arraya:\n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
b[j][i]=a[i][j];
}
}
printf("array b:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%d",b[i][j]);
printf("\n");
}
return0;
}
多维数组作函数参数
例:写函数,求3×4矩阵中所有元素中的最大值
用多维数组名作函数参数
行数作为形参
#include<stdio.h>
int max_value(intarray[][4],int);
int main()
{
int a[3][4]={{11,32,45,67},{22,44,66,88},{15,72,43,37}};
printf("maxvalueis%d\n",max_value(a,3));
return 0;
}
int max_value(intarray[][4],intn)
{
int i,j,max;
max=array[0][0];
for(i=0;i<n;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max=array[i][j];
return max;
}
总结
形参第一维的大小可以指定,也可以不指定,即使指定,也对实参无约束
void f(int array[3][10]);//形参数组两维都指定
void f(int array[][10]);//第一维大小省略
在第二维大小相同的前提下,实参数组的行数可以与形参数组的不同,系统不检查第一维的大小。如
实参数组定义为:int score[5][10];
形参数组可以声明为:int array[3][10];
对三维或更多维的数组,处理方法是类似的
由于数组名代表地址,形参指向实参对面应的空间,函数中对形参的改变, 会造成对实参的影响。
#include<stdio.h>
int main()
{
char str[50];
printf("输入字符串:");
gets(str);
int n=0;
while(str[n]!='\0')
{
n++;
}
printf("这一句中有%d个字符.\n",n);
return0;
}
统计数字字符个数
#include<stdio.h>
int main()
{
char str[50];
int i=0,n=0;
printf("输入字符串:");
gets(str);
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')n++;
i++;
}
printf("其中的数字字符个数是:%d\n",n);
return 0;
}
每一个小写字母出现的次数
#include<stdio.h>
int main()
{
charstr[50];
int n[26]={0};
int i=0;
printf("输入字符串:");
gets(str);
while(str[i]!='\0')
{
if(str[i]>='a'&&str[i]<='z')
n[str[i]-'a']++;
i++;
}
for(i=0;i<26;i++)
if(n[i]!=0)
printf("%c:%d\n",i+'a',n[i]);
return0;
}
复制字符串(除空格字符外)
int main()
{
char str1[50]="Iamahappyboy\'sdaddy.",str2[50];
inti=0,j=0;
while(str1[i]!='\0')
{
if(str1[i]!='')
{
str2[j]=str1[i];
j++;
}
i++;
}
str2[j]='\0';//切记!!
printf("复制出了一个不带空格的拷贝:%s\n",str2);
return0;
}
字符函数和字符串函数
语言中进行文字处理的方法:自编代码完成 利用库函数
字符函数库
include<ctype.h>
串处理函数
include<string.h>
编制自己的字符串函数
字符串复制
#include<stdio.h>
char*scopy(char*str1,constchar*str2);
int main()
{
char s1[50];
scopy(s1,"I am happy.");
printf("%s\n",s1);
return 0;
}
char *scopy(char*str1,const char*str2)
{
char *p1=str1;
const char*p2=str2;
while(*p2!='\0')
{
*p1=*p2;
p1++;
p2++;
}
*p1='\0';
return p1;
}
#include<stdio.h>
int scomp(const char*str1,const char*str2);
int main()
{
printf("%d\n",scomp("PFXa","pfXA"));
printf("%d\n",scomp("PF12","pF34"));
printf("%d\n",scomp("Bxb3","bdeF"));
return0;
}
int scomp(const char*str1,const char*str2)
{
inti=0;
char c1,c2;
do
{
c1=(str1[i]>='A'&&str1[i]<='Z')?str1[i]+32:str1[i];
c2=(str2[i]>='A'&&str2[i]<='Z')?str2[i]+32:str2[i];
i++;
}
while(c1==c2&&c1!='\0'&&c2!='\0');
if(c1>c2)
return 1;
elseif(c1<c2)
return -1;
else
return 0;
}
#include<stdio.h>
int wordnum(const char*str);
int main()
{
chars[81];
gets(s);
printf("\"%s\"have%dwords.\n",s,wordnum(s));
return 0;
}
int wordnum(constchar*str)
{
int i,num=0,word=0;
for(i=0;(*(str+i)!='\0');i++)
{
if(*(str+i)=='')
word=0;
else if(word==0)
{
word=1;
num++;
}
}
return num;
}
关键:word代表一种状态
word==0时,之前读到了空格
现读到空格,word保持0
现读到了非空格,单词数增1,word置为1
word==1时,之前读到的是非空格
现读到空格,word重置为0
现读到了非空格,继续读
根据读到的符号处理
if(现读到空格)
word保持0或重置为0
elseif(之前并不在形成单词中)
单词数增1,word置为1
(无论如何,循环上去继续读)