您的位置:首页 > 编程语言 > C语言/C++

C语言使用小技巧

2013-11-19 08:18 183 查看
1、Bool值的使用

众所周知,C语言是没有表示真假的布尔类型的,但是可以用0表示假,用非零表示真(包括负数,小数等)。但是在实际应用的过程中,通常都是0和1来表示。而这些值都可以用int类型或short类型来表示,为了在软件开发中不造成混乱,最好就是用一个typedef来定义,如:

typedef char bool;


2、常用字符操作

由于字符和整数能够随时进行转换,我们知道,其实字符在内存中都是用整数的二进制码来表示的,所以他们之间可以随时进行转换,如下:

char x='a';
int y=97;
printf("%d",x);//97
printf("%c",y);//a
在实际应用中,更为常见的就是对字符进行循环取值,如下:

for(i='a';i<='z';i++){
       printf("%d  ",i);
 }
也可以直接对字符进行四则运算的操作。

char x='a',y='z';
printf("%d",x-y);
结果为:-25

3、向矩阵输入值

有时候需要定义一个矩阵,然后接收客户端输入的值。最简单的做法如下:

int t;
    t=M*N;
    int b[100]={0};
    for(i=1;i<=t;i++){
        scanf("%d",&b[i]); 
        //cin>>b[i];
    }


4、分段读取客户端输入

当客户端输入诸如19881112来表示1988年11月12日时,如何快速地从字符串中获取到相到的结果。可以使用%4d来读取字符串前4个字符,然后使用%2d来读取月份,%2d获取日期。代码如下:

char *str;
    int year;
    int month;
    int date;
    scanf("%4d%2d%2d",&year,&month,&date);
    printf("year=%4d,month=%2d,date=%2d",year,month,date);

5、熟练字符串操作

由于C语言中没有字符串类型,所以需要定义一个字符类型的指针或者使用字符数组进行字符串的存取。虽然操作起来没有Java或C++那么方便,但是也体现出了C语言的灵活性。
(1) 将输入字符串中的第2个字符换为t并输出:
char *str;
    scanf("%s",str);
    *(str+1)='t';
    printf("%c",*(str+1));//输出第二个字符,为t
    printf("%s",str);// 输出整个字符串
(2)获取字符串中某个字符
char *str="abcd";
    scanf("%s",str);
    char temp=*(str+pCh);//pCh是偏移量,相对于首地址
    printf("%c",temp);
(3)交换两个字符
交换字符串开头的两个字符
char *str;
    scanf("%s",str);
    char* pCh=str;
    if(*pCh!='\0') pCh++;
    char temp=*pCh;
    *pCh=*str;
    *str=temp;
    printf("%s",str);
(4)比较两个字符串的大小
在C++中,由于已经重载了基本的运算符,所以可以直接进行比较即可。

#include <iostream>
using namespace std;
int main(){
    string a="ccass";
    string b="clasa";

    cout<<(a<=b?a:b)<<endl;// 输出小的
    return 0;
}
输出字典序中小的字符串
(5)获取客户端输入的字符串

scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,gets()函数将接收输入的整个字符串直到遇到换行为止。 1.scanf() 所在头文件:stdio.h 语法:scanf("格式控制字符串",变量地址列表); 接受字符串时:scanf("%s",字符数组名或指针);2.gets() 所在头文件:stdio.h 语法:gets(字符数组名或指针);
char *str;
  gets(str);
  printf("%s",str);
两者在接受字符串时:1.不同点: scanf不能接受空格、制表符Tab、回车等; 而gets能够接受空格、制表符Tab和回车等;2.相同点: 字符串接受结束后自动加'\0'。

6、熟练数组操作

数组的应用非常广泛,但是有一些基本的操作还需要牢牢掌握。
(1)使用数组存储字符串进行参数传递

void Sort(int* data){// 些处理数组已经退化为一个指针,指针指向数组的首地址
   printf("%d ",data[2]);                                                                                                                                 
   printf("%d",data);//打印出数组的首地址
}
int main(){
    int a[]={3,4,5};
    Sort(a);
    return 0;
}

(2)求数组长度

int data1[]={1,2,3,4,5};
   int size1=sizeof(data1);// data1就是一个数组
   printf("%d",size1/4);//5 这里需要除以4,由于整数占用4个字节,这个数由数组中存储元素的类型
(3)接收含有空格的字符串
char s[10];
gets(s);// 按行接收
printf("%d",strlen(s));//strlen()函数计算的长度不包含有'\0'

(4)对整数数组初始化为0

int a[10]={0};
    printf("%d",a[2]);
(5)对结构体中的字符数组赋值

struct A {
    char c;
    double d;
    short s;
    char sf[5];
} a;
a.c='a';a.d=5.2356;
a.s=3;
//a.sf[5]="xuwe";不能这样赋值,正确的做法如下:
struct A a1={'a',5.2356,3,"xuwe"}
printf("%d\n",&a4.sf[5]);
(6)数组使用技巧

对于比较耗费内在的数组,可以定义成全局变量,或者在函数体内使用malloc等函数动态申请变量的空间。如果在函数体内定义,会使栈的空间不足而出现栈溢出,导致程序中止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: