c二维数组和字符数组及字符数组常用函数

#include <stdio.h>
#include <stdlib.h>


#define M 2
#define N 3

int main(){
    // int a[M][N]={{1,2,3},{4,5,6}};
    // int a[M][N]={{1,2},{4}};
    // int a[M][N]={1,2,3,4,5,6};
    int a[][N]={1,2,3,4,5,6}; 

    int i,j;
    printf("a   =%p\n",a);
    printf("a+1 =%p\n",a+1);
    printf("a[1]=%p\n",a[1]);
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            printf("%p-->%d \n",&a[i][j],a[i][j] );
        }
        printf("\n");
    }

}
-------------------------------------------------------
a   =0x7fffda206b90
a+1 =0x7fffda206b9c  //相对a移动了N个位置
a[1]=0x7fffda206b9c
0x7fffda206b90-->1 
0x7fffda206b94-->2 
0x7fffda206b98-->3 

0x7fffda206b9c-->4 
0x7fffda206ba0-->5 
0x7fffda206ba4-->6 

 

字符数组
1.定义,初始化,存储特点
存储类型 数据类型 标识符 [下标] ......
单个字符初始化
字符串常量初始化

以\0作为结束符号

#include <stdio.h>
#include <stdlib.h>


#define N 32
int main(){
    char str[N],str1[N],str2[N];
    
    scanf("%s%s%s",str,str1,str2);

    printf("%s\n%s\n%s\n",str,str1,str2);

}

string.h里
strlen sizeof
strcpy strncpy
strcat strncat
strcmp strncmp

strlen 计算字符串不包含\0的长度

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char str[]="hello";
    char str1[]="hello\0abc";
    printf("strlen(%s)=%d\n",str,strlen(str));//strlen(hello)=5
    printf("sizeof(%s)=%d\n",str,sizeof(str));//strlen(hello)=6
    printf("strlen(%s)=%d\n",str1,strlen(str1));//strlen(hello)=5
    printf("sizeof(%s)=%d\n",str1,sizeof(str1));//strlen(hello)=10
}

strcpy 拷贝一个串到另外一个
strncpy 带长度的拷贝
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);

int main(){
    char str[]="hello";
    char str1[]="hello";

    strcpy(str,"abcdefg"); //越界
    puts(str);            //abcdefg
    strncpy(str1,"abcdefg",strlen(str1));//abcde
    puts(str1);
}

char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);

int main(){
    char str[N];
    char str1[N];
    strcat(str,"abcdef"); //不能保证str的空间够,易导致越界
    strncat(str1,"abcdef",N);
    puts(str);//abcdef
    puts(str1);//abcde
    
}

ascii码比较
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
返回ascii差值

#define N 5
int main(){
    char str[N]="abcd";
    char str1[N]="abc";
    printf("%d\n",strcmp(str,str1)); //100
    printf("%d\n",strncmp(str,str1,3)); //0
    
}

 输入的字符计算单词个数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char str[128];
    
    int i;
    int prev_in_world=0; 
    gets(str);
    int count=0;
    for(i=0;str[i] != '\0';i++){
        //空格或者tab
        if(str[i] == 32  || str[i] == 9 ){
            prev_in_world=0;
        }else{
            if(prev_in_world == 0){
                count++;
                prev_in_world=1;
            }
        }
    }
    printf("count(%s)=%d\n",str,count );
    
}

 

posted @ 2018-01-01 19:35  H&K  阅读(559)  评论(0)    收藏  举报