#include <stdio.h>
int str_to_int(char *s)
{
int n = 0;
while (*s)
{
n = n * 10 + (*s - '0');
s++;
}
return n;
}
int find_int_in_array(int *arr, int l, int n)
{
for (int i = 0; i < l; i++)
{
if (arr[i] == n)
return i;
}
return -1;
}
int main()
{
char str[100], buf[100];
int num[100], count[100] = {0}, inx = 0, cnt = 0, i = 0, n, t;
fgets(str, 100, stdin); // fgets输入末尾会包含\n
while (1)
{
if (str[i] != ' ' && str[i] != '\n')
buf[inx++] = str[i];
if ((i > 0 && str[i] == ' ') || str[i] == '\n')
{
buf[inx] = '\0';
n = str_to_int(buf);
t = find_int_in_array(num, cnt, n);
if (t == -1)
{
num[cnt] = n;
count[cnt]++;
cnt++;
}
else
count[t]++;
inx = 0;
}
if (str[i] == '\n')
break;
i++;
}
for (i = 0; i < cnt; i++)
{
printf("%d %d\n", num[i], count[i]);
}
scanf("%d", &n);
t = find_int_in_array(num, cnt, n);
if (t == -1)
printf("不存在");
else
printf("%d", count[t]);
return 0;
}
解答如下
#include<stdio.h>
int str_to_int(char str[])
{
int len=0;
while(str[len]!='\0') len++;
int p=1,sum=0;
for(int i=len-1; i>=0; i--)
{
sum+=(str[i]-'0')*p;
p*=10;
}
return sum;
}
int find_int_in_array(int arr[],int l, int n)
{
for(int i=0; i<l; i++)
if(arr[i]==n) return i;
return -1;
}
int main()
{
char str[255], buf[255];
int num[255] = {0};
int count[255] = {0};
int i,j,k, n = 0, len = 0, index;
gets(str);
printf("num数组:");
for(i=0; str[i]!='\0'; i++)
{
int p=0;
while(str[i]!=' '&&str[i]!='\0') buf[p++]=str[i++];
buf[p]='\0';
int tem=str_to_int(buf);
num[len++]=tem;
printf("%d ",tem);
}
printf("\n");
printf("count数组:");
for(j=0; j<len; j++)
{
for(k=0; k<len; k++)
if(num[k]==num[j])
count[j]++;
printf("%d ",count[j]);
}
printf("\n");
printf("请输入需要查找的数字: ");
scanf("%d", &n);
index = find_int_in_array(num, len, n);
if(index == -1)
printf("该数字不存在\n");
else
printf("出现了%d次\n", count[index]);
return 0;
}
用基础一点的知识给你写下
#include<stdio.h>
int find_int_in_array(int arr[], int n,int l)
{
int index=-1;
for(int i=0;i<l;i++)
{
if (arr[i] == n) {
index = i;
}
}
return index;
}
int str_to_int(char* str)
{
int num = 0;
while (*str != '\0') {
num = 10 * num + (*str - '0');
str++;
}
return num;
}
int main()
{
char str[1000], buf[100];
int num[100] = { 0 };
int count[100] = { 0 };
int n = 0, l = 0, flag = 0, j = 0, index;
printf("请输入字符串\n");
gets(str); //输入字符串
for (int i = 0; str[i] != '\0'; i++) {
// printf("num:%d", num[l]);
// printf("count:%d", count[l]);
if (flag == 0 && str[i] != ' ') { //还没添加数字,且字符串遍历到数字
j = 0;
buf[j] = str[i];
flag = 1;
j++;
}
else
{
if (str[i] != ' ')
{ //还没遇到空格,或者字符串结束,继续添加数字进子字符串
buf[j] = str[i];
j++;
}
else if(str[i]==' '||str[i]=='\0')
{//数字添加完毕
flag = 0;
buf[j] = '\0';
n = str_to_int(buf);//将子字符串转成数字
index = find_int_in_array(num, n, l);
if (index == -1) {//数字不存在num中
count[l] = 1;
num[l] = n;
l++;
}
else {//数字已经存在
count[index]++;
}
}
}
}
for (int i = 0; i < l; i++) {
printf("num:%d count:%d\n", num[i],count[i]);
}
printf("\n请输入需要查找的数字: \n");
scanf_s("%d", &n);
index = find_int_in_array(num, n, l);
if (index == -1) {
printf("该数字不存在\n");
}
else {
printf("出现了%d次\n", count[index]);
}
return 0;
}
#include <stdio.h>
int str_to_int(char *str)
{
int num = 0;
while(*str != '\0') {
num = 10 * num + (*str - '0');
str++;
}
return num;
}
int find_int_in_array(int *arr, int l, int n)
{
for(int i=0; i<l; i++) {
if(arr[i] == n) {
return i;
}
}
return -1;
}
int main()
{
char str[1000], buf[100];
int num[100] = {0};
int count[100] = {0};
int i, n = 0, m = 0, flag = 0, index, pos;
gets(str);
for(i=0; str[i]!='\0'; i++) {
if(flag == 0 && str[i] != ' ') { //碰到第一个数字,开始保存记录数字字符
index = 0;
buf[index++] = str[i]; //记录数字字符
flag = 1;
}
else if(flag == 1) { //已经开始保存记录数字字符
if(str[i] != ' ') { //不是空格,即是数字字符
buf[index++] = str[i]; //记录数字字符
}
if(str[i] == ' ' || str[i + 1] == '\0') { //碰到空格 或 字符串结束符,数字已经完整
flag = 0;
buf[index] = '\0';
n = str_to_int(buf); //字符串转数字
pos = find_int_in_array(count, m, n);
if(pos != -1) { //该数字已存在
num[pos]++; //次数累加
}
else { //该数字不存在,在数组尾部添加
count[m] = n;
num[m] = 1;
m++;
}
}
}
}
printf("请输入需要查找的数字: ");
scanf("%d", &n);
pos = find_int_in_array(count, m, n);
if(pos == -1) {
printf("该数字不存在\n");
}
else {
printf("出现了%d次\n", num[pos]);
}
return 0;
}