在一个二维字符数组中查找一个指定的字符,如果找到就输出此字符的位置,没有找到则输出“-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;
}
代码如下:
#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;
}