编程:写一函数,统计输入一个字符串中字母的个数。

题目
问答题
编程:写一函数,统计输入一个字符串中字母的个数。
参考答案和解析
正确答案: int isalpha(char c){c>='a'&&c<='z'‖c>='A'&&c<='Z')
return(1);else return(0);}
main(){int i,num=0;
char str[255];
printf("INput a string:");
gets(str);
for(i=0;str[i]!="/0';i++)
if(isalpha(str[i]))num++;
puts(str);
printf("num=%d/n",num);
}
解析: 暂无解析
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。


参考答案:由于字母共26个,加上数字符号10个共36个,所以设一长36的整型数组,前10个分量存放数字字符出现的次数,余下存放字母出现的次数。从字符串中读出数字字符时,字符的ASCII代码值减去数字字符 ‘0’的ASCII代码值,得出其数值(0..9),字母的ASCII代码值减去字符‘A’的ASCII代码值加上10,存入其数组的对应下标分量中。遇其它符号不作处理,直至输入字符串结束。
  [算法描述]
  void Count()
  //统计输入字符串中数字字符和字母字符的个数。
  {int i,num[36];
  char ch;
  for(i=0;i<36;i++)num[i]=0;// 初始化
  while((ch=getchar())!=‘#’) //‘#’表示输入字符串结束。
  if(‘0’<=ch<=‘9’){i=ch-48;num[i]++;} // 数字字符
  else if(‘A’<=ch<=‘Z’){i=ch-65+10;num[i]++;}// 字母字符
  for(i=0;i<10;i++) // 输出数字字符的个数
  cout<<“数字”<   for(i=10;i<36;i++)// 求出字母字符的个数
  cout<<“字母字符”<   }

第2题:

假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是ABCDEFG******。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include<conio. h>

include<stdio. h>

void fun(char *a, char *p)

{

}

main ( )

char s[81],*t;

printf ("Enter a string: \n ");

gets (s);

t=s;

while (*t)

t++;

t--; /*指针t指向字符串尾部* /

while (*t== '*' )

t--; /*指针t指向最后一个字母*/

fun (s, t);

printf ("The string after deleted: \n");

puts (s);

}


正确答案:void fun(char *a char *p) { char *t=a; for (; t=p; t++) if(*t!='*') * (a++)=*t; /*将p以前所有不是*号的字符保留下来*/ for (;*t!='\0' ;t++) * (a++) =.t; / * 将p以后的所有*号保留下来*/ *a='\0'; / *在字符串最后加上结束标记位*/
void fun(char *a, char *p) { char *t=a; for (; t=p; t++) if(*t!='*') * (a++)=*t; /*将p以前所有不是*号的字符保留下来*/ for (;*t!='\0' ;t++) * (a++) =.t; / * 将p以后的所有*号保留下来*/ *a='\0'; / *在字符串最后加上结束标记位*/ 解析:本题曾在历年上机考试及模拟试题中多次出现,一般用两个循环语句来实现。第1个循环的作用是将p以前所有不是*号的字符保留下来,即删除所有的*号。第2个循环的作用是将p以后的所有*号保留下来。

第3题:

编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为asd asasdfg asd as zx67 asd mklo,子字符串为as,则应当输出6。

注意:部分源程序给出如下。

请勿改动主函数main和具他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <conio.h>

include <stdio.h>

include <string.h>

int fun(char *str, char *substr)

{

}

main ( )

{

char str[81],substr[3];

int n;

clrscr ();

printf ("输入主字符串 ");

gets (str);

printf ("输入子字符串");

gets (substr);

puts (str);

puts (substr);

n=fun (shr, substr);

printf("n=%d\n ",n);

}


正确答案:int fun(char *str char *substr) { int i j=0; for(i=0;str[i+1]!='\0';i++) /*如果一个长度为2的子字符串在主字符串中出现一次则j+1 如此 循环*/ if (str [i]==substr [0] &&str [i+1]==substr [1] ) j++; return j; /*返回子字符串在主字符串中出现的次数*/ }
int fun(char *str, char *substr) { int i, j=0; for(i=0;str[i+1]!='\0';i++) /*如果一个长度为2的子字符串在主字符串中出现一次,则j+1, 如此 循环*/ if (str [i]==substr [0] &&str [i+1]==substr [1] ) j++; return j; /*返回子字符串在主字符串中出现的次数*/ } 解析:该题中subsu只有两个字符,所以可以用if语句来直接进行判断。要注意if())中str组的下标为i和i+1,即比较当前字符及其以后的一个字符是否分别与substr中的字符对应相同,若都相同则表示出现了一次。

第4题:

程序Cmody051.c,其功能是统计输入字符串中大写英文字母的个数。请改正错程序中的错误。如输入:abcDEFGH123输出:5


/**/charstr1[128];/**/
/**/sum++;/**/

第5题:

1 编程:

用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。


正确答案:
1 题
char *revert(char * str)
{
int n=strlen(str);
int i=0;
char c;
for(i=0;i {
c=str;
str=str[n-i];
str[n-i]=c;
}
return str;
}

第6题:

假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的K度,形参h给出了字符串中前导*号的个数,形参e给出了字符山中最后*号的个数。在编写函数时,不得使用c语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仪在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <stdio.h>

include <conio.h>

void fun (char *a;int n ,int h ,int e)

{

}

main ( )

{

char s [81],*t,*f;

int m=0,tn=0, fn=0;

printf("Enter a string :\n");

gets (s);

t=f=s;

while (*t)

{t++;m++; } /*m为字符串的长度*/

t--; /*指针t指身字符串尾部*/

while (*t=='*')

{t--; tn++; }

/*指针t指向最后一个字母,tn统计尾部'*'的个数*/

while (*f=='*' )

{f++;fn++;}

/*指针f指向第一个字母,tn统计导'*'的个数*/

fun( s, m, fn, tn);

printf ("The string after deleted: \n");

puts (s);

}


正确答案:void fun (char *a int n int h int e) { int ij=0 for (i=h; in-e; i++) /*第一个字母和最后一个字母之间的字符全不删除*/ a[j++]=a[i]; a[j]='\0; /*在字符串最后加上结束标记*/ }
void fun (char *a, int n ,int h , int e) { int i,j=0 for (i=h; in-e; i++) /*第一个字母和最后一个字母之间的字符全不删除*/ a[j++]=a[i]; a[j]='\0; /*在字符串最后加上结束标记*/ } 解析:注意循环变量i的初值(h)和终止值(n-e),由于h和e分别是a中的前导*和尾部*的个数,n是字符串的长度,所以从a[h])到a[n-e-1]之间的所有字符都要留下,而其他字符均删除。删除操作(即留下相应字符)现己由循环完成。
本题技巧部分:
void fun(char *a, int n, int h, int e )
{a[n-e]='\0;
strcpy(a,a+h);}
另外,请注意,a(n-e]的作用是使最后一个字母后出现字符串结束符。木程序采用了strcpy()库函数。

第7题:

请编写一个函数fun(),该函数的功能是:返回给定字符串中大写字母字符的个数。

如字符串"Hello World"中,大写字母的个数为2个。

注意:部分源程序已存在文件PROC5.CPP中。

请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。

文件PROC5.cpp的内容如下:

//PROC5.cpp

include<iostream>

include<string>

using namespace std;

int fun(char *str);

int main()

{

char str[ ]="Chinese Computer World";

cout<<fun(str)<<end;

return 0;

}

int fun(char *str)

{

//**********

}


正确答案:下面是函数fun()函数体的一种实现: int fun(char *str) { int num=0; //用于记录大写字母符的个数初始值为0。 while(*str!='\0') //若是大写字母则总数加1。 { if(*str>='A'&&*str='Z') num++; str++; } return num; }
下面是函数fun()函数体的一种实现: int fun(char *str) { int num=0; //用于记录大写字母符的个数,初始值为0。 while(*str!='\0') //若是大写字母,则总数加1。 { if(*str>='A'&&*str='Z') num++; str++; } return num; } 解析:本题要求编写函数fun()的函数体,完成的功能是返回给定字符串中大写字母字符的个数。从给出的函数首部可知,函数体可用字符指针和循环体的方式来实现。

第8题:

请编写函数fun(),该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include<string. h>

include<stdio, h>

define N 80

int fun (char *s)

{

}

main ( )

{

char line [N];

int num=0;

printf ("Enter a string: \n ");

gets (line);

num=fun (line);

printf ("The number of word is: %d\n\n ",

num);

}


正确答案:int fun(char *s) { int i j=0; for (i=0;s [i]!='\0' ;i++) if(s[i] !=' '&&(s[i+l]==' '||s[i+1]=='\O')) /*如果一个字母的下一个字符为空格或者结束标记则表示一个单词结束*/ j++; return j; /*返回单词个数*/ }
int fun(char *s) { int i, j=0; for (i=0;s [i]!='\0' ;i++) if(s[i] !=' '&&(s[i+l]==' '||s[i+1]=='\O')) /*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/ j++; return j; /*返回单词个数*/ } 解析:判断单词的个数,我们首先想到的是程序怎样识别是一个单词,也即循环语句中的fir(i=0;s[i]!="\0";i++),本题重点是if句中的条件表达方式。

第9题:

有以下函数

函数的功能是( )。

A.统计x和y所指字符串中最前面连续相同的字符个数

B.查找x和y所指字符串中是否有’\0’

C.将y所指字符串赋给x所指存储空间

D.统计x和y所指字符串中相同的字符个数


正确答案:A
本题中由循环条件可知,当遇到l\0”’或“x与y所指的字符的值不相等”中的一个条件时就结束循环,因此本题函数的功能是统计x和y所指字符串中最前面连续相同的字符个数。

第10题:

以下函数实现的功能是void fun (char *s){ char *p,*q,temp; p=s; q=s+ strlen(s)-1; while (p<q) { temp=*p; *p=*q; *p=temp; p++; q--; }}

A.将一个字符串首尾颠倒

B.计算字符串的长度

C.统计字符串中的空格个数

D.将字符串中的小写字母变成大写字母


正确答案:A
解析:本题考核while循环语句和指针的使用。在该函数中,循环开始时,指针p指向字符串的第1个字符,指针q指向字符串的最后一个字符,首先交换这两个字符;然后,指针p前进一个字符位置(指向下一个字符),指针q后退一个字符位置(指向前一个字符);经过若干次循环,条件pq将为假(即指针p和指针q相遇),循环结束。从而实现了将一个字符串首尾颠倒的功能。

更多相关问题