C语言程序设计 字符串典型题练习

 

1 任意输入一行字符串保存在一维字符数组中,判断里面数字字符的个数。

#include<stdio.h>
int main()
{
    int i,n=0;
    char s[80];
    gets(s);
    for (i=0;s[i]!='\0'; i++) {
        if(s[i]>='0'&&s[i]<='9')
            n++;
    }
    printf("%d",n);
    
}

 

2、任意输一行字符串(包括空格),求其长度(不用strlen函数)。

#include<stdio.h>
int main()
{
    int i,n=0;
    char s[80];
    gets(s);
    for (i=0;s[i]!='\0'; i++){}
    printf("%d",i);
}

 

3、输入一个字符串和一个特定字符,在字符串中删除从该特定字符开始的所有字符。例如输入字符串为"abcdefg",特定字符为'd',删除后的字符串为"abc";输入字符串为"abcdefg",特定字符为'x',则输出“特定字符不存在”。

#include<stdio.h>
int main()
{
    int i,flag = 0;
    char s[80],n;
    gets(s);
    scanf("%c",&n);
    printf("特定字符是%c\n",n);
    for (i=0;s[i]!='\0'; i++) {
        if (s[i]==n) {
            s[i]='\0';
            flag=1;
            printf("删除特定字符%c后的字符串是",n);
            puts(s);
            break;
        } else
            flag=0;
    }
    if (flag==0) {
        printf("特定字符不存在");
    }
}

 

4、用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 "stop" 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。单词数量不包括"stop" 。

#include <stdio.h>
#include <string.h>
int main()
{
    int i=0;
    char str[80];
    while (1) {
        scanf("%s",str);
        if (strcmp(str, "stop")!=0) {
            i++;
        } else {
            break;
        }
    }
    printf("%d",i);
}

 

5、编写程序,从输入的一行字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。其中n>0且n<=字符串的长度,否则打印“起始位置n越界”

要求:n和m都由用户输入。

如果抽取的字符串长度不够,则按照实际长度抽取,例如,字符串为“abcde”,若n=2,m=3,则抽取结果为“bcd”;若n=3,m=5,则抽取结果为“cde”;若n=0,m=4 则输出:起始位置0越界  ;若n=6,m=2 则输出:起始位置6越界

#include <stdio.h>
#include <string.h>
int main()
{
    int n,m,i;
    unsigned long l;
    char s[80];
    gets(s);
    scanf("%d%d",&n,&m);
    l=strlen(s);
    if (n+m-1>l) {
        m=l+1-n;
    }
    if (n>0&&n<=l) {
        for (i=n-1; i<n+m-1; i++) {
            printf("%c",s[i]);
        }
    } else {
        printf("起始位置%d越界",n);
    }
    return 0;
}

 

6、任意输入两行字符串,把第二行字符串连接到第一行字符串末尾(不用strcat函数)。

#include <stdio.h>
#include <string.h>
int main()
{
    char s1[80],s2[80];
    int i,l1,l2,j;
    gets(s1);
    gets(s2);
    l1=strlen(s1);
    l2=strlen(s2);
    for (i=l1,j=0; j<l2; i++,j++) {
        s1[i]=s2[j];
    }
    puts(s1);
    return 0;
}

 

 7、有一篇文章,共有多行文字(不超过10行), 最后一行为end。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。统计结果不包括最后一行的end。

#include <stdio.h>
#include <string.h>
int main()
{
    char s[10][80];
    int i=0,j,space=0,lwr=0,upr=0,number=0,other=0;
    while (1) {
        gets(s[i]);
        if (strcmp(s[i], "end")!=0) {i++;}
        else  break;
    }
    for (i=i-1;i>=0 ; i--) {
        for (j=0; s[i][j]!='\0'; j++)
        {   if (s[i][j] == ' ')
                space++;
            else if (s[i][j] >= 'a' && s[i][j] <= 'z')
                lwr++;
            else if (s[i][j] >= 'A' && s[i][j] <= 'Z')
                upr++;
            else if (s[i][j] >= '0' && s[i][j] <= '9')
                number++;
            else
                other++;
        }
    }
    printf("大写字母有%d个\n", upr);
    printf("小写字母有%d个\n", lwr);
    printf("数字有%d个\n", number);
    printf("空格有%d个\n", space);
    printf("其他字符有%d个", other);
}

 

 

 

 

  • 13
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值