C语言基础------排序及字符串相关操作总结

C语言 选择排序(这里是由大到小排序):

#include<stdio.h> 
#include<stdlib.h>
void SelectSort(int a[],int n){
	int i,j,k,t;
	for(i=0;i<n-1;i++){
		// n个元素需要进行(n-1)趟比较 
		for(j=i+1;j<n;j++){
			//先使k记录排序范围内的第一个元素的位置 
			k=i;
			//找出最大元素的位置,由k记录 
			if(a[j]>a[k])
				k=j;
				//如果排序范围的第一个元素(即第i个)不是最大元素 
				if(k!=i){
					//则将最大的元素与第i个元素对调 
					t=a[k];
					a[k]=a[i];
					a[i]=t;
				} 
		}
	}
}
int main(){
	int i,n;
	int *b;
	printf("input a number:\n");
	scanf("%d",&n);
	b=(int*)malloc(n*sizeof(int));
	printf("input n numbers:\n");
	for(i=0;i<n;i++){
		scanf("%d",&b[i]);
	}
	printf("original data:\n");
	for(i=0;i<n;i++){
		printf("%4d",b[i]);
	}
	SelectSort(b,n);
	printf("\n");
	printf("sorted data:\n");
	for(i=0;i<n;i++){
		printf("%4d",b[i]);
	}
	return 0;
}

注意:C语言中定义一个由 n 个数组成的数组(即数组元素个数未知),不可使用以下方法定义:

int n;
scanf("%d",&n);
int num[n];

而应使用如下方法:

//定义
int n,i;
int *num;
scanf("%d", &n);
num = (int *)malloc(n * sizeof(int));

//输入
for (i = 0; i < n; i++)
{
	scanf("%d", &num[i]);
}

定义一个长度未知的多维数组用如下方法:

	int **node;
	int col,row,i,j;
	scanf("%d", &col);
	scanf("%d", &row);
	node = (int **)malloc(col * sizeof(int *));
	for (i = 0; i < n - 1; i++)
	{
		node[i] = malloc(sizeof(int) * row);
		for(j = 0; j < row; j++){
			scanf("%d", &node[i][j]);
		}
	}

记得添加 #include<stdlib.h> 头文件。malloc( )包含在这个头文件中。

需要注意一点,C语言中没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,因此,定义某个字符串时,应使用语句char str[100]="xxx"的形式。

#include<stdio.h> 
#include<string.h>
int main(){
	char s[]="abcde f";
	int len;
	printf("%s\n",s);
	//计算字符串s的长度,用strlen()函数 
	len=strlen(s);
	printf("length:%d",len);
	return 0;
}
#include<stdio.h> 
#include<string.h>
int main(){
	char str[100]={0};
	//也可以写成"0"或{'0'}或{“0”} 
	int len;
	gets(str);
	len=strlen(str);
	printf("length:%d\n",len);
	return 0;
}

getchar( ),putchar( )函数分别为得到一个字符,输出一个字符;gets( )函数从标准输入读入一行数据,遇到换行符就返回,它会把换行符替换成空字符 '\0' ,作为C语言字符串结束的标志。gets( (函数与puts( )函数配对使用,puts( )函数用于显示字符串,并自动在字符串后面添加一个换行标志 '\n' 。 getch( )用法同getchar( ),只是不回显,且头文件是 conio.h 。

#include<stdio.h>
#include<conio.h>
int main(){
	double radius,v,s;
	printf("please enter radius:\n");
	scanf("%lf",&radius);
	v=4.0*3.14*radius*radius*radius/3;
	s=4*3.14*radius*radius;
	printf("V=%lf,S=%lf",v,s);
	getch();
	return 0;
}

加深理解:输入字符,直到遇到换行符停止运行,如下:

#include<stdio.h> 
int main(){
	char c;
	while((c=getchar())!='\n') {
		printf("hello");	
	}
	return 0;
}

计算字符串长度需要调用函数strlen( ),包含在string.h头文件中,下面两个代码案例分别用于求:

1.从键盘输入一行英文,求倒数第2个单词的字符个数。

2.从键盘输入一行字符,求各个“单词”中包含字符的个数。

//从键盘输入一行英文,求倒数第2个单词的字符个数
#include<stdio.h> 
#include<string.h>
//包含strlen()函数 
int main(){
	char s[100];
	int i,j,count=0;
	gets(s);
	i=strlen(s);//字符串长度 
	while(s[i-1]!=' ')	i--;//i标识最后一个空格的位置 
	printf("%d\n",i);
	j=i-1;
	while(s[--j]!=' '){
		count++;
		//如果只有2个单词,当j==0时即完成第1个单词字符个数的计算 
		if(j==0) break;
	}
	//(j+1)标识倒数第2个空格的位置 
	printf("%d %d\n",j+1,count);
	return 0;
}

 

扫描二维码关注公众号,回复: 12445805 查看本文章

//从键盘输入一行字符,求各个"单词"中包含字符的个数
#include<stdio.h>
int main()
{
	int i=0,n=0;
	char b;
	scanf("%c",&b);
	if(b!=' ')
		n++;
	while(b!='\n'){
		scanf("%c",&b);
		if(b!=' '&&b!='\n')
			n++;
		if(n!=0&&b==' '||b=='\n'){
			if(n!=0){
			printf("%d ",n);
			i=1;
			}
			n=0;
		}
	}
	if(i!=1)
	printf("0 "); 
	return 0;
}

输入一个文本行,其中包含多个单词,计算其中最长的单词的长度。 

注:这里可以使用alpha( )函数,用于检测一个字符是否是字母,使用该函数,需要引用ctype.h头文件isdigit( )函数用于检测一个字符是否是数字。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(){
    int value = 0;
    int maxvalue = 0;
    int length;
    char str[100];
    gets(str);
    length = strlen(str);
    for(int i = 0; i < length+1; i++){
        if(isalpha(str[i])){
            value++;
        }
        //遇到空格,将value置零重新计算单词长度 
        else{
            if(value > maxvalue)
                maxvalue = value;
        value = 0;
        }      
    }
    printf("%d\n", maxvalue);
    return 0;
}
//计算输入文本行中字母、数字、其他字符的个数 
#include<stdio.h>
#include<ctype.h>
int main()
{
	int u=0,p=0,y=0;
	char ch;
	while(ch=getchar(),ch!='\n')
	{
		 if(isalpha(ch))//判断输入的字符是不是字母小写a~z或大写A~Z
		{
			u++;
		}
		else if(isdigit(ch))//判断输入的字符是不是十进制的数字
		{
			p++;
		}
		else
		{
			y++;
		}
			
	}
	printf("letter:%d\n",u);
	printf("digit:%d\n",p);
	printf("other:%d\n",y);
	return 0;
}

C语言标识符的命名规则:字母、数字、下划线。第一个字符必须是字母或下划线,后面可以跟随字母、数字或下划线。下面的代码用于判断输入的字符串中各标识符是否合法。

//判断输入的字符串是否标识一个合法的标识符 
#include<stdio.h>
int main(){
	int i;
	char s[100];
	printf("Enter a string:\n");
	gets(s);
	if(s[0]=='_'||(s[0]<='z'&&s[0]>='a')||(s[0]<='Z'&&s[0]>='A'))
	{
		for(i=0;s[i]!='\0';i++){
			if(s[i]==' '||s[i]=='_'||(s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')||(s[i]<='9'&&s[i]>='0'))	continue;
			else{
				printf("illegal\n");
				break;
			}	
		}	
		if(s[i]=='\0')	printf("legal");
	}
	else	printf("illegal\n");
	return 0;
}

 

猜你喜欢

转载自blog.csdn.net/baidu_41774120/article/details/112650788