题目:求出给定字符串中大写字母、小写字母、数字、空格及其他字符的个数。 注意 C++题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目:求出给定字符串中大写字母、小写字母、数字、空格及其他字符的个数。 注意 C++题目相关的知识,希望对你有一定的参考价值。


.填空题
请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面。
例如:str1=“How do”,str2=“ you do?”,结果输出:How do you do?
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 40
void fun(char *str1,char *str2)

int i=0;
char *p1=str1;
char *p2=str2;
while()
i++;
for( ;;i++)
*(p1+i)=;
*(p1+i)='\0';

main()

char str1[N],str2[N];
clrscr();
printf("*****Input the string str1 &
str2*****\n");
printf(" \nstr1:");
gets(str1);
printf(" \nstr2:");
gets(str2);
printf("**The string str1 & str2**\n");
puts(str1);
puts(str2);
fun(str1,str2);
printf("*****The new string *****\n");
puts(str1);

答案及评析:
*(p1+i) *p2 *p2++
填空1:变量i用来记录字符串str1的长度,当指针指到字符串str1结束标志符‘\0'时,while循环结束,变量i停止累加。填空2:指针p2指向字符串str2,通过for循环将字符串str2接在str1后面,循环结束的条件是指针p2所指的字符是字符串结束标志符‘\0'。填空3:指针p2最初指向字符串str2的首字符,通过自加1,使指针p2依次向后移动,指向str2的各个字符,实现将字符串str2接在str1后面的功能。

1.填空题
请补充函数fun(),该函数的功能是求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。
例如:当x[10]=15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,
10.0,16.0,结果为:avg=15.030000。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
double fun(double x[10])

int i;
long t;
double avg=0.0;
double sum=0.0;
for(i=0;i<10;i++)
;
avg=sum/10;
avg=;
t=;
avg=(double)t/100;
return avg;

main()

double avg,x[10]=15.6,19.9,16.7,15.2,
18.3,12.1,15.5,11.0,10.0,16.0;
int i;
clrscr();
printf("\nThe original data is :\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
avg=fun(x);
printf("average=%f\n\n",avg);

答案及评析:
sum+=x[i] avg*1000 (avg+5)/10
填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除以10,实现四舍五入的功能。
1.填空题
请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。注意:不区分大小写,不能使用字符串库函数。
例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 100
void fun(char *tt,int alf[])

int i;
char *p=tt;
for(i=0;i<26;i++)
;
while(*p)

if(*p>='A'&&*p<='Z')
;
if(*p>='a'&&*p<='z')
alf[*p-'a']++;
;


main()

char str[N];
char a='a';
int alf[26],k;
clrscr();
printf("\nPlease enter a char string:");
scanf("%s",str);
printf("\n**The original string**\n");
puts(str);
fun(str,alf);
printf("\n**The number of letter**\n");
for(k=0;k<26;k++)

if(k%5==0)
printf("\n");
printf("%c=%d ",a+k,alf[k]);

printf("\n");

答案及评析:
alf[i]=0 *p+=32 p++
填空1:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。填空2:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。填空3:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。
1.填空题
请补充函数fun(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。
例如,输入aeiouAOUpqrt,结果为A:2 E:1 I:1 O:2 U:2 other:4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 100
void fun(char *str,int bb[])

char *p=str;
int i=0;
for(i=0;i<6;i++)
;
while(*p)

switch(*p)

case 'A':
case 'a':bb[0]++;break;
case 'E':
case 'e':bb[1]++;break;
case 'I':
case 'i':bb[2]++;break;
case 'O':
case 'o':bb[3]++;break;
case 'U':
case 'u':bb[4]++;break;
default:;




main()

char str[N],ss[6]="AEIOU";
int i;
int bb[6];
clrscr();
printf("Input a string: \n");
gets(str);
printf("the string is: \n");
puts(str);
fun(str,bb);
for(i=0;i<5;i++)
printf("\n%c:%d",ss[i],bb[i]);
printf("\nother:%d",bb[i]);

答案及评析:
bb[i]=0 bb[5]++ p++;
填空1:数组bb[6] 用来存放5个元音字母和其他字符的个数,在使用之前需要清零。
填空2:数组元素bb[5] 用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。
1.填空题
str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。
例如:str=“how do you do”,结果为:num=4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#define N 80
void fun(char *s,int *num)

int i,n=0;
for(i=0;;i++)

if(s[i]>=’a’&&s[i]<=’z’&&(s[i+1]==
’ ’||s[i+1]==’\0’))
;

;

main()

char str[N];
int num=0;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
fun(str,&num);
printf("The number of word is :
%d\n\n",num);

答案及评析:i<*num n++ *num=n
填空1:*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。填空2:如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。填空3:题目要求结果由变量num传回,所以要将n的值赋给指针num所指的单元。
1.填空题
str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。
例如:str=“Bcd123e456hui890”,结果为:123456890。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#define N 80
int bb[N];
int fun(char s[],int bb[],int num)

int i,n=0;
for(i=0;i<num;i++)

if()

bb[n]=;
n++;


return ;

main()

char str[N];
int num=0,n,i;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
n=fun(str,bb,num);
printf("\nbb= ");
for(i=0;i<n;i++)
printf("%d",bb[i]);
答案及评析:s[i]>= ′0′ &&s[i]<= ′9′ s[i]- ′0′ n
填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。
1.填空题
从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。
例如:当xx[8]=时,
bb[4]=。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 1000
int fun(int xx[],int bb[],int num)

int i, n=0;
int g, s;
for(i=0;i

g=;
s=xx[i]/10 ;
if((g+s)>5)
;

return;

main()
int xx[N];
int yy[N];
int num=0,n=0,i=0;
printf("Input number :\n");
do

scanf("%u",&xx[num]);

while(xx[num++]!=0);
n=fun(xx,yy,num);
printf("\nyy=");
for(i=0;i
printf("%u ",yy[i]);
答案及评析:xx[i] bb[n++]=xx[i] n
填空1:将一个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。填空2:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时,变量n记录了满足条件的无符号整数的个数。填空3:题目要求满足条件的无符号整数的个数由fun函数返回,所以函数返回n。
1.填空题
请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#include <conio.h>
char *fun(int n)

int g,s,b;
g=n%10;
s=n/10%10;
b=;
if((g+b)==s)
return;
else
return;

main()

int num=0;
clrscr();
printf("******Input data *******\n");
scanf("%d",&num);
printf("\n\n\n");
printf("****** The result *******\n");
printf("\n\n\n%s",fun(num));

答案及评析:n/100%10 〃yes!〃 〃no!〃
填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,则返回〃yes!〃。填空3:当个位数字和百位数字之和不等于十位数字时,则返回〃no!〃。
1.填空题
请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。
例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#include<conio.h>
#define LEN 80
main()

char str1[LEN],str2[LEN];
int n,i;
clrscr();
printf("Enter the string:\n");
gets(str1);
printf("Enter the position of the string
deleted:");
scanf();
for(i=0;i<n;i++)

str2[i]=’\0’;
printf("The new string is:%s\n",);

答案及评析:〃%d〃,&n str2[i]=str1[i]; str2
填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符‘ &’。填空2:截取前n个字符,就是将字符串str1的前n个字符依次赋给字符串str2的前n个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。
1.填空题
请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。例如,当str1=“cdefghij”,则str2=“cegi”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#define LEN 80
main()

char str1[LEN],str2[LEN];
char *p1=str1,*p2=str2;
int i=0,j=0;
clrscr();
printf("Enter the string:\n");
scanf();
printf("***the origial string***\n");
while(*(p1+j))

printf("",*(p1+j));
j++;

for(i=0;i<j;i+=2)
*p2++=*(str1+i);
*p2=’\0’;
printf("\nThe new string is:%s\n",);

答案及评析:〃%s〃,str1 %c str2
填空1:本题考查对标准输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为〃%s〃,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。填空2:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为〃%c〃。填空3:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以printf()函数的输出表列是str2
参考技术A #include <stdio.h>
int letter,digit,space,others;
int main()
void count(char []);
char text[80];
printf("input string:\n");
gets(text);
printf("string:");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("\nletter:%d\ndigit:%d\nspace:%d\nothers:%d\n",letter,digit,space,others);
return 0;


void count(char str[])
int i;
for (i=0;str[i]!='\0';i++)
if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z'))
letter++;
else if (str[i]>='0' && str [i]<='9')
digit++;
else if (str[i]==32)
space++;
else
others++;
本回答被提问者采纳
参考技术B #include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#include <string.h>
int main()

char *c=(char *)malloc(10000);

gets(c);
string str=c;
int l=str.length();
int da=0,xiao=0,shuzi=0,kong=0,qita=0;

while(l--)

if(c[str.length()-l-1]>='A'&&c[str.length()-l-1]<='Z')

da++;

else if(c[str.length()-l-1]>='a'&&c[str.length()-l-1]<='z')

xiao++;

else if(c[str.length()-l-1]>='0'&&c[str.length()-l-1]<='9')

shuzi++;

else if(c[str.length()-l-1]==' ')

kong++;

else qita++;

cout<<"大写:"<<da<<"个、 小写:"<<xiao<<"个、 数字:"<<shuzi<<"个、 空格"<<kong<<"个、 其他:"<<qita<<"个"<<endl;

free(c);
return 0;
参考技术C #include <stdio.h>
int letter,digit,space,others;
int main()
void count(char []);
char text[80];
printf("input string:\n");
gets(text);
printf("string:");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("\nletter:%d\ndigit:%d\nspace:%d\nothers:%d\n",letter,digit,space,others);
return 0;


void count(char str[])
int i;
for (i=0;str[i]!='\0';i++)
if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z'))
letter++;
else if (str[i]>='0' && str [i]<='9')
digit++;
else if (str[i]==32)
space++;
else
others++;

2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。 要求子串必须只含有一个小写字母,数字字符数量随意。 求这样的子串最大长度是多少?

2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。
要求子串必须只含有一个小写字母,数字字符数量随意。
求这样的子串最大长度是多少?

答案2022-11-01:

经典的滑动窗口问题。
时间复杂度:O(N)。
空间复杂度:O(1)。

代码用rust编写。代码如下:

use rand::Rng;
fn main() 
    let nn: i32 = 100;
    let test_time: i32 = 10000;
    println!("测试开始");
    for _ in 0..test_time 
        let n = rand::thread_rng().gen_range(0, nn) + 1;
        let str = random_string(n);
        let ans1 = right(&str);
        let ans2 = zuo(&str);
        if ans1 != ans2 
            println!("ans1 = :?", ans1);
            println!("ans2 = :?", ans2);
            println!("出错了!");
            break;
        
    
    println!("测试结束");


// 一个绝对正确的暴力方法
fn right(s: &str) -> i32 
    let str = s.as_bytes();
    let mut ans = 0;
    for i in 0..str.len() as i32 
        for j in i..str.len() as i32 
            if check(str, i, j) 
                ans = get_max(ans, j - i + 1);
            
        
    
    return ans;


fn check(str: &[u8], l: i32, r: i32) -> bool 
    let mut letter_number = 0;
    for i in l..=r 
        if str[i as usize] >= 'a' as u8 && str[i as usize] <= 'z' as u8 
            letter_number += 1;
        
    
    return letter_number == 1;


fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T 
    if a > b 
        a
     else 
        b
    


// 用窗口
// 时间复杂度O(N)
fn zuo(s: &str) -> i32 
    let str = s.as_bytes();
    let n = str.len() as i32;
    // 窗口内有几个小写字母了
    let mut letters = 0;
    // 窗口的右边界
    // [left, right)
    let mut right = 0;
    let mut ans = 0;
    // for枚举了每一个窗口的开始位置,0... 1...... 2.....
    for left in 0..n 
        while right < n 
            // right不能越界,一旦越界不用再往右了
            if letters == 1 && str[right as usize] >= 'a' as u8 && str[right as usize] <= 'z' as u8
            
                break;
            
            // letters == 0 str[right]是数字
            if str[right as usize] >= 'a' as u8 && str[right as usize] <= 'z' as u8 
                letters += 1;
            
            right += 1;
        
        // [left.....right)
        // [left.....right-1]
        if letters == 1 
            ans = get_max(ans, right - left);
        
        if str[left as usize] >= 'a' as u8 && str[left as usize] <= 'z' as u8 
            letters -= 1;
        
    
    return ans;


// 为了测试
const CHARS: [char; 36] = [
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
    'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
];

// 为了测试
fn random_string(n: i32) -> String 
    let mut ans = String::from("");
    for _i in 0..n 
        ans.push(CHARS[rand::thread_rng().gen_range(0, 36)]);
    
    return ans;


执行结果如下:


左神java代码

以上是关于题目:求出给定字符串中大写字母、小写字母、数字、空格及其他字符的个数。 注意 C++题目的主要内容,如果未能解决你的问题,请参考以下文章

题目1120:全排列

2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: “A man, a plan

利用列表统计字符串大小写字母,数字和其他字符

题解字符串匹配

P3370 模板字符串哈希

模板字符串哈希