C语言指针、字符串与二维数组编程实例练习题

指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。本文主要介绍C语言中指针、字符串与二维数组编程实例练习题,以及相关的示例代码。

1、找查子字符串的位置和次数

使用字符串和指针实现在指定字符串中查找子字符串的位置和次数,代码如下,

#include <stdio.h>

int main()
{
    void search( char *a, char *b );


    char a[] = "cjavapy = www.cjavapy.com c javap py";
    char b[] = "java";
    search( a, b );
    return(0);
}


void search( char *a, char *b )
{
    int alen = strlen( a );
    int blen = strlen( b );
    int i, j, k, s;
    int sum = 0;
    for( i = 0; i < alen; i++ )
    {
        k = i;
        s = 0;
        for ( j = 0; j < blen; j++ )
        {
            if ( a[k++] == b[j] )
            {
                s++;
            }else{
                break;  /* 退出当前循环 */
            }
        }
        if ( s == blen )        /* 子串出现 */
        {
            sum++;
            printf( "出现位置%d;第%d次\n", i + 1, sum );
        }
        if ( k == alen )
        {
            break;
        }
    }
}

2、字符串连接

使用指针将两个字符串进行连接,并且不破坏原始字符串,代码如下,

#include<stdio.h>

char *concat(char *s1,char *s2)
{
    char *s,*p,*q;
    int len1=0,len2=0;
    p=s1;
    while(*p!='\0')
    {
        len1++;p++;
    }
    p=s2;
    while(*p!='\0')
    {
        len2++;p++;
    }
    s=q=(char *)malloc(sizeof(len1+len2));
    p=s1;
    while((*q++=*p++)!='\0');
    q--;//q后退到'\0'
    p=s2;
    while((*q++=*p++)!='\0');
    return s;

}
void main()
{
    char s1[]="cjavapy";
    char s2[]="=c java python";
    char *s;
    s = concat(s1,s2);
    printf("%s\n",s);
}

3、遍历二维字符串数组

使用指针遍历二维字符串数组,代码如下,

#include <stdio.h>
char * stringFor(char** str,int size) ;
int main()
{
  int i,len;
  char * temp ;
  char * a[]={"cjavapy","c/c++/c#","javapy","python"}; //1
  char ** s = a; //2
  printf("%d\n",sizeof(a)/sizeof(a[0]));//4块区域
  printf("a[0]=%s\n",a[0]);
  printf("*(s+1)=%s\n",*(s+1));
  printf("第二行第二个元素*(*(s+1)+2)=%c\n",*(*(s+1)+2));
  len =sizeof(a)/sizeof(a[0]);
  for( i=0;i<strlen(a[0]);i++)
  {
    printf("%c\n",*(*(s+0)+i));
    //printf("%c\n",s[0][i]);
  }
  temp = stringFor(s,len);

  }

char * stringFor(char** str,int size) {
  int i;
  printf("函数中遍历\n");
  for(i=0;i<size;i++)
  {
  printf("%s\n",str[i]);
  }
}

4、二维数组的查找

输入一个整数,在一个二维数组中,判断数组中是否含有该整数。代码如下,

#include <stdio.h>
int add(int arr[][3], int x, int y, int n)//函数的形参为:数组,行数,列数,还有n。
{
    int i = 0;//把i赋值为0数组的第一行
    int j = y - 1;//把列数赋值给j这里要-1,不-1会越界访问。
    while (i<=x && j>=0)
    {
        if (arr[i][j] < n)//先从第一行的最后一个值来进行比较。如果小于目标值,行数加1.
        {
            i++;
        }
        else if (arr[i][j] > n)//如果大于要找的目标值,列数-1。
        {
            j--;
        }
        else//相等返回0.
        {
            return 1;
        }
    }
    return 0;//没找到返回0.
}
int main()
{
    int arr[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };//创建一个有序的二维数组
    int n = 0;//创建一个变量n
    printf("请输入一个需要查找的整数:\n");
    scanf("%d", &n);//输入n,代表你想要找的那个数。
    printf("%d在arr[3][3]中", n);
    if (add(arr, 3, 3, n))
    {
        printf("存在\n");
    }
    else
    {
        printf("不存在\n");
    }
    return 0;
}

推荐阅读
cjavapy编程之路首页