精华内容
下载资源
问答
  • # c语言判断字符类型

    2020-12-04 20:30:28
    c语言判断字符类型 字母,数字,空格,其他字符如何区别

    c语言判断字符类型

    字母,数字,空格,其他字符如何区别
    在这里插入图片描述

    展开全文
  • 文章目录【C】C语言判断字符串是否是int型正整数前言一、代码二、结果 【C】C语言判断字符串是否是int型正整数 前言         此程序功能...

    【C】C语言判断字符串是否是int型正整数

    前言

            此程序功能主要是实现:判断在CMD下输入的字符串是是否是int型的正整数。
            在判断字符是数值时还可以了解一下isdigit()函数,可以参考:https://blog.csdn.net/Jiajikang_jjk/article/details/85944714

    一、代码

    /* 
        程序功能:
                判断输入的字符串是否是int型正整数型
    
     */
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int chk_data(char *num);
    #define SIZE 100
    
    int main(void)
    {
        char str[SIZE];   //定义一个大小为SIZE的char型数组
        while (1)
        {
            printf("input :");
            scanf("%s", str);
            if (chk_data(str) == 0)
            {
                printf("输入数据错误,请重新输入!\n");
            }
            else
            {
                printf("是数值\n");
                break;
            }
        }
    
        printf("%d\n", atoi(str));
    }
    
    // 子函数
    int chk_data(char *num)
    {
        int i;
        for (i = 0; num[i]; i++) // 遍历形参num(传入实参的大小)
        {
            if (num[i] > '9' || num[i] < '0') //只要有非数字,就返回错误
            {
                printf("传入值含有非数值\n");
                return 0;
            }
        }
    
        if (i > 100) //都是数字,但长度超过100位,返回错误
        {
            printf("超出了数字长度\n");
            return 0;
        }
        return 1;
    }
    

    二、结果

    在这里插入图片描述

    展开全文
  • C语言判断字符输入 自己定义函数,即用自定义函数判断输入字符
  • ![图片说明](https://img-ask.csdn.net/upload/202011/01/1604212041_420801.jpg)
  • 初学C语言:15、判断字符类型

    千次阅读 2020-04-04 17:16:21
    输入一个字符,判断字符类型,即字母(alpha)、数字(numeric)和其它字符(other)。 Input 一个字符。 Output 字符的类型,alpha、numeric或other。 Sample Input A Sample Output alpha #include<stdio.h&...

    Description
    输入一个字符,判断字符的类型,即字母(alpha)、数字(numeric)和其它字符(other)。
    Input
    一个字符。
    Output
    字符的类型,alpha、numeric或other。
    Sample Input
    A
    Sample Output
    alpha

    #include<stdio.h>
    int main()
    {
        char x;
        scanf("%c",&x);
        if(x>=65&&x<=122)
        printf("alpha\n");
        else if(48<=a&&a<=57)
        printf("numeric\n");
        else if(0<=a&&a<=255)
        printf("other\n");
        return(0);
    }
    
    展开全文
  • 目录 一、可以用三种方式解决子串问题:函数strstr、...先举几个例子来说明一下什么样的字符串可以称作子串(区分大小写,假设字符串数组长度为20): 令str1[20]="dou LUO da lu"; 1.str2[20]="da l";是子串; 2.

    目录

    一、可以用三种方式解决子串问题:函数strstr、指针、子串出现的首个位置。

    二、使用函数strstr判断str1中是否包含str2

    三、利用指针来判断是否为子串

    四、不用函数和指针,返回子串在母串中出现的首位置


    一、可以用三种方式解决子串问题:函数strstr、指针、子串出现的首个位置。

    先举几个例子来说明一下什么样的字符串可以称作子串(区分大小写,假设字符串数组长度为20):

    令str1[20]="dou LUO da lu";

    1.str2[20]="da l";是子串;

    2.str2[20]="dal";不是子串;

    3.str2[20]="LUO";是子串;

    4.str2[20]="Luo";不是子串;

    5.str2[20]="dou da";不是子串。

    二、使用函数strstr判断str1中是否包含str2

    1.strstr函数在库函数"string.h"中,它的使用方法是strstr(str1,str2),函数得到的是地址,并不是数据内容,所以要用指针变量来接收;

    2.如果判断str2是子串,就会返回str1中首次出现str2加上其后的内容,否则返回null;

    举个例子:str1[20]="dou LUO da lu"; str2[20]="da l";那么strstr(str1,str2)返回的内容是"da lu";

    3.运行代码和结果(codeblocks和手机程序C Compiler可运行)

    #include<stdio.h>
    #include<string.h>
    void main()
    {
        char str1[20],str2[20];
        char *str;//设置指针变量来存储子串在母串中的地址
        printf("请输入被查找字符串str1:");
        scanf("%s",str1);
        printf("要查找的字符串str2:");
        scanf("%s",str2);
        str=strstr(str1,str2);
        if(str)//判断str是否为空,不能写成str!=null
        {
            printf("str2是子串:%s\n",str);
        }
        else
        {
            printf("str2不是子串:%s\n",str);
        }
    }

    注意代码中进行比较的两个字符串是运行程序后手动输入的,用的scanf函数获取,所以字符串得是连续的,若有空格则会自动将前两个字符串分别赋值给str1和str2,至于第二个空格及以后有多少内容都不管,看结果就知道了:

    所以可以把原代码中的scanf函数改成:

        printf("请分别输入字符串str1和str2,用空格隔开:");
        scanf("%s%s",str1,str2);

    运行结果:

    4.如果不用输入的方式,直接在程序中给定两个字符串的话,可以有多个空格,代码如下:

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char str1[20]="dou LUO da lu";
        char str2[20]=" LUO d";//注意必须写成数组型,一定要带下标[N]!!
        char *str;
        str=strstr(str1,str2);
        printf("根据结果自行判断:%s\n",str);
    }

    关于strstr函数的详细定义可以参看https://www.runoob.com/cprogramming/c-function-strstr.html

    三、利用指针来判断是否为子串

    1.基本思路:利用指针p依次遍历str1,每遍历一位字符便将之与str2的首地址值*q进行比较,如果相同则两个指针同时自增,然后依次向后比较,若不同则指针p往下移动一位,再与str2的首地址值*q进行比较,循环往复,直到str2遍历完(即确定str2为子串),或者str1遍历完。

    ①外层循环:for(p=str1;*p;p++)意思是从首地址开始,只要*p不等于'0',则执行内嵌语句块,然后自增;

    ②内层循环:for(q=str2;*p==*q&&*q;p++,q++); 意思是从首地址开始,判断两个字符串的值是否相等且str2是否遍历完,因为for语句后面有分号,表示它没有内嵌语句,所以若判断为真则执行第三表达式,判断为假则退出内层循环,执行外循中内嵌的其他语句,然后再执行外层循环,接着再从头开始执行内层循环。

    关于for循环的详细用法可参看http://c.biancheng.net/cpp/html/45.html

    2.指针初始化与赋值需要注意,在c语言里没有总体处理一个字符串的机制。例如:

    ①char *p="asdfgh"; 初始化,指针p指向字符串首地址

    ②char *p; p="asdfgh"; 赋值,指针p指向字符串首地址

    ③char a[10],*p; p=a; 赋值,数组的变量名a表示该数组的首地址

    ④int a=1; int b[10]; int *p=&a; int *q=b; int *w=&b[0];这些指针初始化都是正确的

    总的来说,指针p指向地址,而*p指向数据,详细了解指针可参看https://www.cnblogs.com/mfrbuaa/p/3756342.html

    3.代码及运行情况:

    #include<stdio.h>
    
    int main()
    {
        char str1[20]="sadadadf";
        char str2[20]="adf";
        char *p=str1,*q=str2;//指针初始化,赋以首地址
        int flag=0;//设置一个变量来判断是否为子串
    
        for(p=str1;*p;p++)//将str1的首地址赋给p;第二个表达式判断字符是否为‘0’;
        {
            for(q=str2;*p==*q&&*q;p++,q++);//注意这里有分号!!这个for语句没有内嵌代码
    
            if(!*q)//如果str2遍历完,此时*q的值一定是默认值‘0’,那么!*q为真
            {
                flag=1;
                break;//得到想要的答案之后就跳出循环
            }
        }
        if(flag==1) printf("是");
        else puts("否");//判断后执行紧邻第一句,可以不加大括号{},puts()和printf()都可以输出
    
    }

    啰嗦几句:最开始用while语句写的代码,发现运行结果不对,调试之后还是for循环好用点,但这个程序还是有个小问题,如果str1="sadadf"; str2="adf"; 运行结果显示“否”,不正确,若str2="df",运行结果为“是”,是对的,那是因为内层循环比较到str1[3]和str2[2]时,前者是‘a’,后者是‘f’,这时候内存循环结束,外层循环执行第三表达式p++,这时候*p='d',再执行内层循环也得不到想要的结果了,我就想着是不是可以再增加一个内层循环,可是呢,对于现在这两个字符串来说,结果是对了,可是如果str1="sadadadf";结果又会出错,还是跟之前一样的问题,嗯~一般情况下还是好使的,不过下面这种不用函数和指针的方法更好,没有这些问题!

    四、不用函数和指针,返回子串在母串中出现的首位置

    1.用getchar()来获取一个个字符,依次存入数组当中;

    getchar()的具体用法可参见https://www.runoob.com/cprogramming/c-function-getchar.html

    2.用while循环将获得的字符依次存入数组中:while((c=getchar())!='\n') a[num++]=c;

    ①如果获得的字符不是回车符,就存入数组a中,包括空格。注意while循环后没有大括号{}或分号;时,则紧邻的第一句为其循环体;

    ②num=0;则(num++)=0,num=1,所以是从a[0]开始存,存到最后一个字符a[num-1],循环结束。

    3.进行判断,如果是子串,返回并输出子串在母串中出现的首位置,否则什么都不返回。(同while一样,若for和if后面没有分号和大括号,则紧跟的第一句为其循环体)

     首先,外层循环先依次判断母串元素a[i]与要查找串的首位值b[0]是否相等,如果相等则进行下一步循环与比较,内循表达式如下:

    if(a[i]==b[0])
    {
        for(j=1;j<lb;j++)
            if(a[i+j]!=b[j])
                break;
        if(j==lb)
        {
        printf("%d\n",i+1);
        }
    }

    因为前面已经判断了a[i]与b[0]相等,所以将数组下标分别下移一位,再比较,每比较一次就判断是否相等,如果相等,下标下移并比较;如果不相等则退出内层循环,判断j与lb是否相等(此时肯定不相等的,只是遵从顺序执行规则,要判断一次),再回到if(a[i]==b[0])语句,此时a的下标已经变成了i+j,即i=i+j,将这一位与b的首位再比较,若相等则循环比较,若不相等则退回到外层循环。

    如果比较之后确定为子串,那么子串一定遍历完,此时jj与lb一定相等。

    4.代码及运行情况:

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int i,j,la,lb,num=0;
        char c,a[120],b[100];
        printf("请输入母串:");
        while((c=getchar())!='\n')//while循环后没有大括号{}或分号;时,则紧邻的第一句为其循环体
            a[num++]=c;//用数组a存储被查找字符串
    
        num=0;//num一定要重新赋值为0,否则数组b的值就不是从首地址开始
        printf("输入要查找的字符串:");
        while((c=getchar())!='\n')
            b[num++]=c;//用数组b存储要查找的字符串
    
        la=strlen(a);
        lb=strlen(b);
        for(i=0;(la-i)>=lb;i++)//如果遍历到i还没行,将剩下的串长与要查找的串长相比,若还大,接着循环,若小,就不用再比较了
        {
            if(a[i]==b[0])
            {
                for(j=1;j<lb;j++)
                    if(a[i+j]!=b[j])//for后面没有分号和大括号,所以紧跟的第一句为其循环体
                        break;//if后面没有分号和大括号,所以紧跟的第一句为其循环体
                if(j==lb)
                {
                    printf("子串出现的首位置是母串第%d位\n",i+1);
                    break;
                }
            }
        }
    
    }
    
    

    文中三种思路来源于文章https://blog.csdn.net/fakine/article/details/7517417/

    写在最后:每次代码看懂了,复制能够运行,然后自己码一遍,结果运行没问题,但就是结果出了问题,前前后后仔细对比,就是不知道哪里错了,感觉都是对的啊,每次到最后找到问题所在时,基本上都是咪咪小问题被忽略了,就造成了大问题,比如多个或少个分号啊空格,或者数据类型搞的不对、少个简单但很关键的语句等,好的习惯需要更多训练。

    展开全文
  • c语言 switch判断字符串 因为c语言中switch里面很难放进字符串,所以才联想到要发表一篇这个文章来抢先吃c语言的螃蟹(其实在上一篇文章中就已经提到了这样的方法了) #define toasc(c) (((unsigned char)(c))&...
  • C语言的运用非常之多,它兼顾了高级语言的汇编语言的优点,相较于其它编程语言具有较大优势。那么C语言中的switch语句如何使用呢?...switch语句中使用的表达式必须具是int或enum类型,否则如flo...
  • C语言字符类型和整数类型的通用性

    千次阅读 2014-11-24 23:49:10
    字符型数据与整型数据是通用的 向字符变量赋予整数 #include void main() { char c1,c2; c1=97; c2=98; printf("%c %c/n",c1,c2); printf("%d %d/n",c1,c2); } 大小写字母的转换 #include void ...
  • C语言查找字符

    千次阅读 2017-09-21 00:17:55
    简述使用c语言实现字符串查找子串,返回第一个子串出现的位置。环境 ubuntu16.04 LTS GCC编译器 代码 #include #define N 100 int find_str(char* str1,char* str2) { int i,j,flag=-1; for(i=0,j=0;str1[i]!=...
  • 字符数组的元素是字符类型的。字符数组用于存放字符或字符串。 C语言中字符数组的一般形式为: char 数组名[数据长度] 。例如:char a[10]; a[0]=‘0’; a[1]=’ 1’; a[2]=‘2’; a[3]=‘3’; a[4]=‘4’; a[5...
  • C语言字符串和字符数组

    千次阅读 2017-01-10 22:57:51
    C语言字符串就是用双引号括起来的任意字符序列,在字符串中同时也可以包括转义字符,它是以’\0’为结尾的字符数组 如”helloworld”; char *string = “helloworld”; 字符数组: 用来存放字符的数组,...
  • C语言实现三角形类型判断

    万次阅读 2018-03-15 09:25:33
    * 文件名:三角形类型判断.c * 功能描述:输入三角形三条边,判断类型 * (普通 直角 等边 等腰) */ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main(void) { int a, b, ...
  • C语言 类型字符串怎么判断为空

    万次阅读 2018-05-26 23:49:09
    平时我们判断C语言类型字符串是否为空,如下 char *p; ... if(p == "") ... 但是会提示警告:Result of comparison against a string literal is unspecified (use strncmp instead)。当时我...
  • 首先C语言中并没有字符串这个基础数据类型。但是字符串在c语言中的涉及却是十分的广泛,并且也是十分重要的。 定义: 由双引号" "引起来的内存中的一串字符且以’\0’为结束标志符 的字符字符串的操作 1.size_t ...
  • C语言判断

    2021-01-05 19:08:46
    任何表达式语句都是表达式加分号组成的。T C语言程序是从源文件的第一条语句开始执行的。*F 程序执行总是从main函数开始,如果有有其他函数,则完成...C语言函数返回类型的默认定义类型是void F 函数返回类bai型是你定d
  • C语言字符型(char)的简单使用

    万次阅读 多人点赞 2020-11-17 21:12:04
    C语言字符型(char)的简单使用 刚接触C语言不久,在这记录下自己的一些学习心得。今天主要是在敲代码时遇到了一个小问题,如图: 应该是个比较简单的编程题。在我的想法中,应该使用循环逐个读入由A至Z的每个...
  • 格式字符转义字符
  • C语言 判断一个字符是字母还是数字

    万次阅读 热门讨论 2017-10-04 01:59:46
    #include #define arraylen(array,len) { len=(sizeof(array) /sizeof(array[0]));} int isLetter(char c); int isNumber(char c); void main() { char chs[]="12345678abcdegf134"; int length=0;... arra
  • C语言字符串结束符

    千次阅读 2019-10-08 04:49:58
    '\0'就是8位的00000000,为字符NULL,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是字符串结束标志。 1. 字符串变量str[] 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符...
  • c语言检查字符函数When working in C, we can use the ctype.h standard library set of functions to check the value of a char type variable. 在C语言中工作时,我们可以使用ctype.h标准库函数集来检查char...
  • c语言字符串中的小写字母转换成大写字母描述给定一个字符串,将其中所有的小写字母转换成大写字母。输入输入一行,包含一个字符串(长度不超过100,可能包含空格)。输出输出转换后的字符串。样例输入helloworld123...
  • 一种是字符串(当然也可以叫数组法),此方法可以用来判断字符串输入以及INT类型的输入 另一种是数字输入,因为追求简便性所以此方法只能判断回文数,不能判断回文字符串。要想都判断也很简单,将变量类型调整即可...
  • C语言字符串(字符数组)

    千次阅读 2014-04-10 10:55:51
    # 从概念上讲,C语言中没有字符串数据类型 # 在C语言中使用字符数组来模拟字符串 # C语言中的字符串是以‘\0’结束的字符数组 # C语言中的字符串可以分配于栈空间,堆空间或者只读存储区 #include #include ...
  • C语言实现字符串压缩

    千次阅读 2019-10-15 22:24:41
    C语言中没有String类型,因此需使用字符串数组代替string。即定义固定长度的字符串数组: char a[长度]; 或者在定义的同时初始化 char a[] = "Hello World"; 指针 指针的初始化 char *p; 初始化的同时对指针进行赋值...
  • 本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。 函数接口定义: bool palindrome( char *s ); 函数palindrome判断输入字符串...
  • C语言字符数组

    千次阅读 2019-04-19 17:00:50
    C语言中没有字符类型,故我们用 字符数组来处理字符串。 二、字符数组的定义 因为字符数组是存放字符的数组,故其 与数组定义类似。其定义一般为: char a[10]; 表示定义了10个字节的连续内存空间。 三、字符...
  • c语言字符串转换成整数

    千次阅读 2016-07-08 21:26:15
    c语言的数字字符串转换为整数,1.可接受“123 2123”处理为1232123;2.空指针、正负号、非纯数字字符串、数据越界溢出的错误处理。   #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,878
精华内容 40,751
关键字:

c语言判断字符类型

c语言 订阅