用c语言, 在一个二维字符数组中查找一个指定的字符,如果找到就输出此字符的位置,没有找到则输出“-1”

在一个二维字符数组中查找一个指定的字符,如果找到就输出此字符的位置,没有找到则输出“-1”

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7518630
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:用二分查找在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.
  • 除此之外, 这篇博客: C语言用函数实现,二分法查找有序数组中的数,若没有返回1中的 题目:二分法查找有序数组中的数,没有返回-1 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 一、解题思路:
    1.找出数组中间那个元素的下标(mid=begin/end),通过数组下标找出数组的中间值并与目标值比较,判断如果目标值与数值中间的下标对应的元素值相等,则返回b。
    2.如大于目标值,把中间的下标减去1并作为最后一个下标(end),begin不变,然后mid=(begin+end)/2计算下一个中间值。
    3.如小于目标值,把中间的下标加上1并作为第一个下标(begin),end不变,然后mid=(begin+end)/2计算下一个中间值。
    4.若无法找到返回-1,用-1的原因是因为数组中的元素下标都大于0.

    #include<stdio.h>
    int Binaryserach (int arr[],int len,int a);
    int main()
    {
    
      int a=6;
      int arr[]={1,2,3,4,5,6,7};
      Binaryserach(arr,sizeof (arr)/sizeof (arr[0]),a);
      printf("%d",Binaryserach(arr,sizeof (arr)/sizeof (arr[0]),a));
    
    
    return 0;
    }
    int Binaryserach (int arr[],int len,int a)
    {   
    	int b=a;  	int begin=0;	int end=len;	int mid=len/2;	int i=0;
    	for(i=0;i<len;i++)//由于目标值可能位于数组最后,所以为了功能需要,需要循环遍历一次数组。
    		if(a==arr[mid])//注意==是比较而 一个=是赋值
    			{
    			return b;
    			}
    	else if (b<arr[mid])
    		{
    		   end=mid-1;
    		   mid=(begin+end)/2;
    	     }
    		else
    		{
    		  begin=mid+1;
    		  mid=(begin+end)/2;
    		}
     	}
    return -1;
    }
    
  • 您还可以看一下 徐传林老师的基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)课程中的 1、数据中台课程说明小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    代码如下:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char arr[3][4] = {{'a', 'b', 'c', 'd'}, {'e', 'f', 'g', 'h'}, {'i', 'j', 'k', 'l'}};
        char target = 'f';
        int x = -1, y = -1;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                if (arr[i][j] == target) {
                    x = i;
                    y = j;
                    break;
                }
            }
        }
        if (x != -1 && y != -1) {
            printf("The position of %c is (%d,%d)", target, x, y);
        } else {
            printf("-1");
        }
        return 0;
    }
    

    解释: 首先定义一个二维字符数组,按行列顺序初始化它,并且给出指定字符target,遍历二维数组,如果查找到目标字符,输出其位置信息,否则输出-1。格式化输出利用printf函数,适当运用if-else语句。


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

void find_char(char arr[][100], char ch, int *row, int *col, int rows, int cols) {
    int i, j, found = 0;
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            if (arr[i][j] == ch) {
                *row = i;
                *col = j;
                found = 1;
                break;
            }
        }
        if (found) {
            break;
        }
    }
    if (found) {
        printf("The character '%c' is found at position (%d,%d)\n", ch, *row, *col);
    } else {
        printf("The character '%c' is not found.\n", ch);
    }
}

int main() {
    char arr[3][100] = {{"abcd"}, {"efgh"}, {"ijkl"}};
    int row, col;
    find_char(arr, 'h', &row, &col, 3, 4);
    return 0;
}

供参考:

#include <stdio.h>
int main()
{
    int i ,j , flg;
    char str[5][10], ch;
    for (i = 0;i < 5; i++)
        scanf("%s", str[i]);
    scanf(" %c", &ch);
    for (i = 0,flg = 0;i < 5;i++){
        for (j = 0; str[i][j]; j++)
        {
            if (str[i][j] == ch){
                flg = 1;
                printf("str[%d][%d]=%c", i, j, str[i][j]);
                break;
            }
        }
        if (flg) break;
    }
    if (!flg) printf("-1");
    return 0;
}