马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
/*在字符串内查找一个字符,并输出其出现的次数和下标 */
typedef struct
{
int index;
int count;
} strsch;
strsch *strch(char str[], char key, strsch *s) //定义一个返回值为结构体指针的函数
{
int cnt = 0; //保存字符出现的次数
int inx = 0; //保存字符首次出现的下标
char *p = NULL; //初始化临时指针
p = str;
for (size_t i = 0; *(p + i) != '\0'; i++)
{
if (*(p + i) == key)
{
cnt++; //判断字符出现的次数
}
}
for (size_t i = 0; *(p + i) != '\0'; i++)
{
if (*(p + i) == key)
{
inx = i; //判断字符首次出现的下标
break;
}
}
if (cnt < 1) //字符不存在的情况
{
cnt = -1;
inx = -1;
}
s->index = inx;
s->count = cnt;
return s;
}
int main(int argc, char const *argv[])
{
strsch *i;
char c;
srand(time(NULL));
char str[26];
for (size_t j = 0; j < 26; j++)
{
str[j] = (j / 2) > sqrt(j) ? (rand() % 13 + 78) : (rand() % 13 + 110); //给字符串赋值
}
str[26] = '\0'; //手动添加结束字符
printf("字符串:\n%s", str);
printf("\n");
scanf("%c", &c);
strch(str, c, i);
printf("字符:%c\n出现次数: %d\n出现位置: %d", c, i->count, i->index);
return 0;
}
================================================
E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-ltrxuxdl.yf5 --stdout=Microsoft-MIEngine-Out-4ad1gvxa.e3h --stderr=Microsoft-MIEngine-Error-nqlgwzei.1dy --pid=Microsoft-MIEngine-Pid-bcfkbuyo.ohm --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
字符串:
ouxvoyQTXNUQNPRQNSPSPYUQTT
o
字符:o
出现次数: 3
出现位置: 0
E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-smw554iw.nkf --stdout=Microsoft-MIEngine-Out-nykzwlxt.qnm --stderr=Microsoft-MIEngine-Error-gob4nn2o.lis --pid=Microsoft-MIEngine-Pid-odowxlij.cda --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
字符串:
xnxyvsQOVYSNUTOTUZVNXUXZOT
x
字符:x
出现次数: 3为什么次数总是多一个,头大,找不到问题在哪
出现位置: 0
E:\Administrator\Documents\My C>
两处错误,不知道你的怎么就成功了,
strsch *i; //这是一个结构体指针,不能直接传进去赋值给它
第二处,str数组大小应该是27才对,这样str[26] = '\0'才会没问题。
|