题目
给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。
-
你可以假设nums中的所有元素是不重复的。
-
n 将在 [1, 10000]之间。
-
nums的每个元素都将在 [-9999, 9999]之间。
思路
键盘输入目标值和数组,然后循环遍历数组与目标值比对,相等则返回下标,不等则返回-1,我这里用的flag标记是否找到了目标值。flag=1则找到了目标值,falg=0则没找到目标值,这其中用到的两个库函数值得注意一下
c库函数isdigit(): 是头文件ctype.h中声明的一个函数
判断c指定的字符是否为数字字符,即’0’~‘9’,如果是,返回1;否则,返回0
ungetc()函数 语法:
用于将字符退回到输入流。
int ungetc(char c,FILE*p);
参数c为要退回的字符;
参数p为要退回到的输入流。
ungetc()函数返回字符c。
代码实现
#include<stdio.h>
#include<ctype.h>
int main()
{
int nums[1000];
char c;
int target;
int n = 0;
while ((c = getchar()) != '\n')
{
if (isdigit(c))
{
ungetc(c, stdin);//将c送回输入流
scanf("%d", &nums[n++]);
}
}
printf("请输入目标值:");
scanf("%d", &target);
int flag;//标记值
int i=0;
for (i; i < n; i++)
{
if (nums[i] == target) {
flag = 1;
break;
}
else {
flag = 0;
}
}
if (flag ==1) {
printf("%d", i);
}
else if(flag==0) {
printf("-1");
}
return 0;
}
示例
总结
此题还是比较简单的,主要就是两个C语言库函数得了解一下。可以方便的将指定字符转化为数字字符