【C语⾔】对输⼊的字符串中C关键词的查统计
完成对输⼊的字符串中C关键词的查统计。
程序运⾏⽰例如下:
本程序将为您统计C语⾔的关键字的个数,请输⼊,输⼊end结束输⼊:
if do while while do break goto helloworld end
您的输⼊中C语⾔关键字出现的次数统计如下:
break    :      1
do        :      2
goto      :      1
if        :      1
while    :      2
输⼊格式:
"本程序将为您统计C语⾔的关键字的个数,请输⼊,输⼊end结束输⼊:\n"
输出格式:
"您的输⼊中C语⾔关键字出现的次数统计如下:\n"
"%-10s: %6d\n"
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#define MAX 32
struct Count {
char* name;
int count;
};
int main() {
char s[10] = { 0 };
struct Count arr[MAX] = {
"auto", 0,
"break",0,
"case",0,
"char",0,
"const", 0,
"continue",0,
"default",0,
"do", 0,
"double",0,
"else",0,
"enum",0,
"float",0,
"for",0,
"goto",0,
"if",0,
"int",0,
"long",0,
"register",0,
"while", 0,
"reuturn",0,
"short",0,
"signed",0,
"sizeof",0,
"static", 0,
"struct",0,
"switch",0,
"typedef",0,
"union",0,
"unsigned",0,
"void", 0 ,
"volatile",0,
"while", 0,
};
int i;
printf("本程序将为您统计C语⾔的关键字的个数,请输⼊,输⼊end结束输⼊:\n");
while (strcmp(s, "end") != 0) {
scanf("%s", s);
for (i = 0; i < MAX-1; i++) {
if (strcmp(s, arr[i].name) == 0) { // strcmp--字符串⽐较函数,如果两个字符串相等,返回值为0
arr[i].count++;
}
}
}
printf("您的输⼊中C语⾔关键字出现的次数统计如下:\n");
for (i = 0; i < MAX-1; i++) {
if (arr[i].count != 0) {
printf("%-10s: %6d\n", arr[i].name, arr[i].count);
}
}
}
⽅法⼀(推荐)
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXWORD 80
#define NKEYS (sizeof(keytab) / sizeof(struct key))
struct key
{
char *word;
int count;
}                          keytab[] =
{
"auto", 0,
"break", 0,
"case", 0,
"char", 0,
"const", 0,
"continue", 0,
"default", 0,
"do", 0,
"double", 0,
"else", 0,
"enum", 0,
"extern", 0,
"float", 0,
"for", 0,
"goto", 0,
"if", 0,
"int", 0,
"long", 0,
"register", 0,
"return", 0,
"short", 0,
"singed", 0,
"sizeof", 0,
"static", 0,
"struct", 0,
"switch", 0,
"typedef", 0,
"union", 0,
"unsigned", 0,
"void", 0,
"volatile", 0,
"while", 0
}                        ;
void getword(char *, int);
int binsearch(char *, struct key *, int);
int main(int argc, char *argv[])
{
int n;
char word[MAXWORD];
printf("本程序将为您统计C语⾔的关键字的个数,请输⼊,输⼊end结束输⼊:\n"); do
{
getword(word, MAXWORD);
if (isalpha(word[0]))
{
if ((n = binsearch(word, keytab, NKEYS)) >= 0)
{
keytab[n].count++; //到则对应次数+1
}
}
}
while (strcmp(word, "end") != 0);
printf("您的输⼊中C语⾔关键字出现的次数统计如下:\n");
for (n = 0; n < NKEYS; n++)
{
if (keytab[n].count > 0)
{
printf("%-10s: %6d\n", keytab[n].word, keytab[n].count);        }
}
return0;
}
/* 折半查:在tab[0]到tab[n-1]中查word */
int binsearch(char *word, struct key tab[], int n)
{
int result;
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if ((result = strcmp(word, tab[mid].word)) < 0)
{
字符串截取 c++high = mid - 1;
}
else if (result > 0)
{
low = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
/* getword:从输⼊中获取某个单词 */
void getword(char *word, int lim)
{
int c;
void ungetch(int);
char *w = word;
while (isspace(c = getchar()))
{
}
if (c != EOF)
{
*w = c;
w++;
}
if (!isalpha(c))
{
*w = '\0';
}
for ( ; --lim > 0; w++)
{
if (!isalnum(*w = getchar()))
{
//读⼊的某个字符不是字母,则将它退还给输⼊缓冲区            ungetch(*w);
break;
}
}
*w = '\0';
}
⽅法⼆

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。