精华内容
下载资源
问答
  • C语言判断字符串是否为回文

    千次阅读 2020-12-05 22:55:21
    C语言判断字符串是否为回文 回文就是字符串中心对称,如“abcba”、“abccba”是回文,“abcdba”不是回文。 /*判断字符串是否为回文*/ #include <stdio.h> int main(void) { int i,k; char line[10]; /*...

    C语言判断字符串是否为回文

    回文就是字符串中心对称,如“abcba”、“abccba”是回文,“abcdba”不是回文。

    /*判断字符串是否为回文*/
    #include <stdio.h>
    int main(void)
    {
        int i,k;
        char line[10];
        /*输入字符串*/
        printf("Enter a string:");
        k=0;
        while((line[k]=getchar())!='\n')
            k++;
        line[k]='\0';
        /*判断字符串line是否为回文*/
        i=0;//i是字符串首字符的下标 
        k=k-1;//k是字符串尾字符的下标 
        /*i和k两个下标从字符串首尾两端同时向中间移动,逐级判断对应字符是否相等*/
        while(i<k){
            if(line[i]!=line[k])//若对应字符不相等,则提前结束循环 
                break;
            i++;
            k--;
        } 
        if(i>=k)//判断for循环是否正常结束,若是则说明字符串是回文 
            printf("It is a palindrome\n");
        else
            printf("It is not a palindrome\n");
        return 0;
    }
    
    展开全文
  • C语言源代码 判断字符串是否是回文。。。
  • C语言字符串结束

    千次阅读 2019-10-08 04:49:58
    C语言字符串结束符'\0' '\0'就是8位的00000000,为字符NULL,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是字符串结束标志。 1. 字符串变量str[] 在C语言中没有专门的字符串变量,通常用一个字符...

    C语言中字符串结束符'\0'

    '\0'就是8位的00000000,为字符NULL,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是字符串结束标志。

    1. 字符串变量str[]

    • 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

          参考:C 字符串常量和字符串变量定义和区别

    • 把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};
      实际上数组str1在内存中的实际存放情况为:
      c x j r . 2 1 i c . o r g '\0'
      这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。

    2. 定义字符数组

    三种方式:

    u8 str1[]={"cxjr.21ic.org"}; //字符串赋值
    u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'}; //人工添加
    u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'}; //故意给数组预留一个空位

    注意:

    1. 当数组长度不够。假设我们指定了数组长度,如:u8 str1[13]={"cxjr.21ic.org"};
      由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。

    2. 如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:

    u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};

    参考:C语言中字符串结束符'\0'

    转载于:https://www.cnblogs.com/TianchiLiu/p/9866134.html

    展开全文
  • c语言 判断字符串长度 实现

    千次阅读 2019-05-18 11:50:00
    首先明白答案的本质(该函数)是一个计数器该计数器用for循环来实现实现对一串字符串的计数字符串以空格开头 不计算空格 计算空格后的数字直到遇到\0结束。num计算器字符串不以空格结束 计算空格后的数字直到遇到\0...

    /*

    首先明白答案的本质(该函数)是一个计数器该计数器用for循环来实现
    实现对一串字符串的计数
    字符串以空格开头
    不计算空格
    计算空格后的数字直到遇到\0结束。num计算器
    字符串不以空格结束
    计算空格后的数字直到遇到\0结束
    打印出计算该数字的个数

    定义 数组s接受字符串

    */

    #include <stdio.h>
    #include <stdio.h>
    #define SIZE 100

    int main (void)
    {
    char s[SIZE]
    printf("请输入一串字符串,我会返回该字符串的长度");
    gets(s);
    //判断是否以空格开头 是返回0{跳过他} 否返回1 {直接计数}
    for(i=0;(c=s[i])!'\0';i++)//每个字符依次遍历并存储到另一个值遇到\0结束
    {
    num//未完待续
    }



    }

    转载于:https://www.cnblogs.com/HL77961/p/10885230.html

    展开全文
  • java与C语言字符串结束符上的区别

    万次阅读 多人点赞 2015-10-15 09:50:41
    综述:在C语言字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束,而在java语言中没有结束符这一概念。具体见下面分析。 1. C 语言  在C语言字符串和字符数组基本上没有区别,都需要结束符;如:char ...

    综述:在C语言中字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束,而在java语言中没有结束符这一概念。具体见下面分析。

    1. C 语言

      在C语言中字符串和字符数组基本上没有区别,都需要结束符;如:char s[4]={'a','b','c','d'};此字符数组的定义编译可以通过,但却没有关闭数组,若其后需要申请内存,那么以后的数据均会放入其中,尽管它的长度不够,但若为 char s[5]={'a','b','c','d'};则系统会自动在字符串的最后存放一个结束符,并关闭数组,说明字符数组是有结束符的;
        而字符串定义的长度必须大于字符序列的长度,如:char s1[4]={"abcd"};编译不能通过,而应写成char s1[5]={"abcd"};并且系统会自动在字符串的最后存放一个结束符,说明字符串有结束符;
    在C语言中使用strlen()函数可以测数组的长度,strlen(()函数计算的时候不包含结束符'\0'。
    char s[5]={'a','b','c','d'};
    char s1[5]={"abcd"};
    int a=strlen(s);
    int b=strlen(s1);
    结果是a,b均为4;
    注:printf函数跟strlen一样,打印输出字符串/数组时都以'\0'作为结束符,即:打印输出到'\0'为止(不包括'\0')。

    2.Java语言
      字符串和字符串数组都是不需要结束符的;
      如:char[] value={'j','a','v','a','语','言'};
            String s1=new String(value);
            String s2="java语言";  
       int a=value.length;
            int b=s1.length();
            int c=s2.length();

      运行得到的结果a,b,c都是6,说明字符串和字符串数组都不需要结束符。但注意此处value.length和s1.length(),在数组中有属性length可以记录数组对象的长度,而length()方法是File类中的一个实例方法,用于返回文件的大小,当然也可以返回字符串的大小。

    3.java中无需结束符的原因

    Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。比如,数组对象里有一个属性length,就是数组的长度,String类里面有方法length()可以确定字符串的长度,因此对于输出函数来说,有直接的大小可以判断字符串的边界,编译器就没必要再去浪费一个空间标识字符串的结束。

    4.java字符串末尾空字符的处理

    java和c通信的时候,由于c中的char中有结束符的,所以当java收到C发来的字符串时,后面往往会有若干空字符,如果不做处理的话,java会对其一并输出,为了将空字符处理掉不输出,可以采用如下两种方法:

    方法一:

    调用java字符串的trim()方法,该方法会将字符串前后的空字符读去掉。

    方法二:自己实现去掉尾部空字符的方法:

    /**
        * 截取掉C中之前的字符串。即只截取前的字符
        *
        * @param s:尾部带有空字符的java字符串
        * @return
    	*
    */  
       public static String deletTailChar0(String s){  
           if(s == null){  
               return null;  
           }  
           char[] chars = s.toCharArray();  
           StringBuffer sb = new StringBuffer();  
           for(char c : chars){  
               Character ch = c;  
               if(0 == ch.hashCode()){ //如果到了字符串结束,则跳出循环  
                   break;  
               }else{  
                   sb.append(c);  
               }  
           }  
           return sb.toString();  
       }  

    附:

    1.Java 数组初始化的两种方法:   

        静态初始化: 程序员在初始化数组时为数组每个元素赋值;

        动态初始化: 数组初始化时,程序员只指定数组的长度,由系统为每个元素赋初值。

    public class ArrayInit {
    	public static void main(String[] args) {
    		
    		//静态初始化数组:方法一
    		String cats[] = new String[] {
    				"Tom","Sam","Mimi"
    		};
    		
    		//静态初始化数组:方法二
    		String dogs[] = {"Jimmy","Gougou","Doggy"};
    		
    		//动态初始化数据
    		String books[] = new String[2];
    		books[0] = "Thinking in Java";
    		books[1] = "Effective Java";
    		
    		System.out.println(cats.length);
    		System.out.println(dogs.length);
    		System.out.println(books.length);
    	}
    }
    注意, 声明一个数组不需分配任何存储空间,它仅仅是代表你试图创建一个数组。跟C/C++声明一个数组的明显区别就是空间的大小没有被特别标识。因此,下面的声明将会引起一个编译期错误。

    int num[5];
    即:上面代码Demo中静态初始化中的方法二,如果改为String dogs[3] = {"Jimmy","Gougou","Doggy"};  则在编译时报错。
    一个数组的大小将在数组使用new关键字真正创建时被给定,例如:
    int num[];
    num = new int[5];


    迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往后遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。

    迭代器其实就是维护一个当前的指针,这个指针可以指向当前的元素,可以返回当前所指向的元素,可以移到下一个元素的位置,通过这个指针可以遍历容器的所有元素。迭代器一般至少会有以下几种方法:

    First(); //将指针移至第一个位置或获得第一个元素

    GetCurrent(); //获得当前所指向的元素

    MoveNext(); //移至下一个元素

    2.1 C++中的迭代器:

    void TestIterator()
    {
    	vector<int> vec;			// 定义一容器
    	for(int i = 0; i < 5; i++)
    	{
    		vec.push_back(i*2);		//添加元素
    	}
    	//用迭代器访问容器中的每个元素
    	cout << "iterator vector:" << endl;
    	for(vector<int>::iterator itr = vec.begin(); itr != vec.end(); itr ++)
    	{
    		cout << *itr << "   ";	//itr是一个指针,指向当前的元素, 所以要解引用获得元素值
    	}
    	cout << endl;
    
    
    	map<int, string> student;	//创建一个map,对应学号-姓名的键值对
    	//添加元素
    	student.insert(pair<int, string>(1, "张三"));
    	student.insert(pair<int, string>(3, "王五"));
    	student.insert(pair<int, string>(2, "李四"));
    	//遍历容器中的元素
    	cout << "iterator map:" << endl;
    	for (map<int, string>::iterator itr = student.begin(); itr != student.end(); itr ++)
    	{
    		cout << itr->first << "-->" << itr->second << endl;
    	}
    }
    

    c++中的容器(如vector、map、list、set等)一般会提供四个迭代器:

    iterator:正向迭代,从前往后遍历,可修改元素的值

    const_iterator:正向常量迭代,但不能修改元素的值,因为指向的是const的引用

    reverse_iterator:反向迭代,从后往前遍历,可修改元素的值

    const_reverse_iterator:反向常量迭代,但不能修改元素的值,因为指向的是const的引用

    每一种迭代器都提供一对首尾位置的标志begin和end。


    2.2 Java中的迭代器:

    public static void testIterator() {
    	//创建一个列表
    	List<Integer> list = new ArrayList<Integer>();
    	list.add(4);	//添加元素
    	list.add(3);
    	list.add(7);
    
    	//返回一个迭代器,并遍历列表中的元素
    	Iterator<Integer> iterator = list.iterator();
    	while (iterator.hasNext()) {
    		Integer value = iterator.next();
    		System.out.print(value + "    ");
    	}
    	System.out.println();
    
    	//返回ListIterator迭代器并从后往前遍历列表的元素
    	ListIterator<Integer> listIterator = list.listIterator(list.size());
    
    	System.out.println("ListIterator:");
    	while (listIterator.hasPrevious()) {
    		Integer value = listIterator.previous();
    		System.out.print(value + "    ");
    	}
    	System.out.println();
    }

    Java中的List接口及其实现类可以通过iterator()返回Iterator,或通过listIterator()和listIterator(int index) 返回ListIterator。

    Iterator和ListIterator都是迭代器,ListIterator继承自Iterator。Iterator只能对列表进行遍历,且只能从前往后遍历,ListIterator可以修改列表,且可以选择往前或往后遍历。

    java中map容器的遍历(可分别利用keySet或entrySet):

    方法一:keySet遍历key+value:
    Iterator<String> iter = map.keySet().iterator();
    while (iter.hasNext()) {
        key = iter.next();
        value = map.get(key);
    }
    
    方法二:entrySet遍历key+value:
    Iterator<Entry<String, String>> iter = map.entrySet().iterator();
    Entry<String, String> entry;
    while (iter.hasNext()) {
        entry = iter.next();
        key = entry.getKey();
        value = entry.getValue();
    }

    迭代器小结:C++中通过容器对象的begin或end方法来获取到迭代器,其迭代器的含义是一个指针,指向容器中的元素;而java中的迭代器是一个对象,通过容器的iterator()方法得到容器的迭代器,之后通过迭代器对象的方法hasNext()来获取到容器的指向。


    3.C语言常用字符串函数

    函数名: strrchr 

    功  能: 在串中查找指定字符的最后一个出现 
    用  法: char *strrchr(char *str, char c);

    举例:

        char fullname="./lib/lib1.so";  
        char *ptr;  
        ptr = strrchr(fullname,'/');  
        printf("filename is %s",++ptr);  
        //运行结果:filename is lib1.so  
    

    函数名: strchr 
    功  能: 在串中查找指定字符的第一个出现 
    用  法: char *strchr(char *str, char c);

    举例:

    char fullname="./lib/lib1.so";  
    char *ptr;  
    ptr = strrchr(fullname,'.');  
    printf("after strchr() is %s",++ptr);  
    //运行结果:after strchr() is  /lib/lib1.so 

    函数名: strtok 
    功  能: 在串中查找指定字符的第一个出现 
    用  法: char *strtok(char *s, char *delim);

    说明:

    1.strtok函数的实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’\0′)来替换,直到找遍整个字符串。这句话有两层含义:(1)每次调用strtok函数只能获得一个分割单位。(2)要获得所有的分割单元必须反复调用strtok函数。

    2.strtok函数以后的调用时的需用NULL来替换s.

    3.形参s(要分割的字符串)对应的变量应用char s[]=”….”形式,而不能用char *s=”….”形式。

    举例:

        void  main()   
        {   
            char buf[]=”Golden Global View”;   
            char* token = strtok( buf, ” “);   
            while( token != NULL )   
            {   
                printf( ”%s “, token );    
                token = strtok( NULL, ” “);   
            }   
            return 0;   
        }   
        /*其结果为: 
          
        Golden 
        Global 
        View 
        */  
    
    strcspn() 用来计算字符串 str 中连续有几个字符都不属于字符串 accept,其原型为:
        int strcspn(char *str, char *accept);
    【参数说明】str、accept为要进行查找的两个字符串。
    strcspn() 从字符串 str 的开头计算连续的字符,而这些字符都完全不在字符串 accept 中。简单地说,若 strcspn() 返回的数值为 n,则代表字符串 str 开头连续有 n 个字符都不含字符串 accept 中的字符。
    【返回值】返回字符串 str 开头连续不含字符串 accept 内的字符数目。
    注意:如果 str 中的字符都没有在 accept 中出现,那么将返回 atr 的长度;检索的字符是区分大小写的。
    提示:函数 strspn() 的含义与 strcspn() 相反,可以对比学习。
    【示例】返回s1、s2包含的相同字符串的位置。
     

    #include<stdio.h>
    #include <stdlib.h>
    #include<string.h>
    int main()
    {
        char* s1 = "http://c.biancheng.net/cpp/u/biaozhunku/";
        char* s2 = "c is good";
        int n = strcspn(s1,s2);
        printf("The first char both in s1 and s2 is :%c\n",s1[n]);  
        printf("The position in s1 is: %d\n",n);
    
        system("pause");
        return 0;
    }运行结果:
    The first char both in s1 and s2 is :c
    The position in s1 is: 7
    再看一个例子,判断两个字符串的字符是否有重复的。

    #include<stdio.h>
    #include <stdlib.h>
    #include<string.h>
    int main()
    {
        char* s1 = "http://c.biancheng.net/cpp/xitong/";
        char* s2 = "z -+*";
    
        if(strlen(s1) == strcspn(s1,s2)){
            printf("s1 is diffrent from s2!\n");
        }else{
            printf("There is at least one same character in s1 and s2!\n");
        }
    
        system("pause");
        return 0;
    }
    运行结果:
    s1 is diffrent from s2!
    strpbrk()函数检索两个字符串中首个相同字符的位置,其原型为:
        char *strpbrk( char *s1, char *s2);
    【参数说明】s1、s2要检索的两个字符串。
    strpbrk()从s1的第一个字符向后检索,直到'\0',如果当前字符存在于s2中,那么返回当前字符的地址,并停止检索。
    【返回值】如果s1、s2含有相同的字符,那么返回指向s1中第一个相同字符的指针,否则返回NULL。
    注意:strpbrk()不会对结束符'\0'进行检索。
    【函数示例】输出第一个相同字符之后的内容。

    #include<stdio.h>
    #include<string.h>
    int main(void){
        char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
        char* s2 = "see";
        char* p = strpbrk(s1,s2);
        if(p){
            printf("The result is: %s\n",p);   
        }else{
            printf("Sorry!\n");
        }
        return 0;
    }
    输出结果:
    The result is: see.xidian.edu.cn/cpp/u/xitong/

    C语言中常用的API函数可参考:C语言中文网 




    展开全文
  • 目录 一、可以用三种方式解决子串问题:函数strstr、...先举几个例子来说明一下什么样的字符串可以称作子串(区分大小写,假设字符串数组长度为20): 令str1[20]="dou LUO da lu"; 1.str2[20]="da l";是子串; 2.
  • C语言字符串结束符'\0'

    千次阅读 2019-07-12 21:32:00
    '\0'就是 字符串结束标志。 '\0'是转义字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000 原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一...
  • C语言字符串结束标志是【'\0'】。C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串字符串总是以【'\0'】作为结束符。'\0...
  • '\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。在数值类型里就代表数字0。 数值类型存储时,最高位决定正负号,其他位都为0可不就是0了么? '\0'是转译字符,意思是告诉程序,这...
  • C语言字符串的长度

    2021-04-02 13:36:23
    利用一个循环来遍历该字符串,并且判断当前位置是否为空,在字符串的结尾,通常用\0来表示结束。 #include<stdio.h> #include<string.h> main() { int i=0; char str[50]="This Is a C Program"; ...
  • C语言合并字符串

    千次阅读 2019-03-16 14:47:51
    注意字符串结束条件的判断。 /*--------------------------- 功能:合并字符串 描述:将str2逆序插入到str1中 输入示例: ABCDEFGHIJK 1234 输出示例: A4B3C2D1EFGHIJK ---------------------------- Author: Zhang...
  • C语言字符串和字符数组

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

    千次阅读 2016-04-29 10:05:02
    '\0'就是 字符串结束标志。 '\0'是转译字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000 原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放...
  • 1.C语言字符串 首先C语言中并没有字符串这个基础数据类型。但是字符串c语言中的涉及却是十分的广泛,并且也是十分重要的。 定义: 由双引号" "引起来的内存中的一串字符且以’\0’为结束标志符 的字符。 字符串...
  • c语言字符串中的小写字母转换成大写字母描述给定一个字符串,将其中所有的小写字母转换成大写字母。输入输入一行,包含一个字符串(长度不超过100,可能包含空格)。输出输出转换后的字符串。样例输入helloworld123...
  • C语言实现字符串反转操作

    千次阅读 2020-10-08 15:27:35
    C语言实现字符串反转操作 其实思路很简单,就是利用一个中间变量,将字符串的第一个字符和最后一个字符对调,直到到达字符串中间结束,实现代码如下: #include<stdio.h> #include<string.h> // 反转...
  • 字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限 ! 而常量区的字符串(也包括其他数据)只有读取权限 ! 没有写入权限。 因为 常量...
  • C语言实现字符串比较(非库函数) 今天在keil上写代码时,使用strlen和strcmp一直会有警告,所以就有了下面的东西,自己写一个判断数组大小和字符数组比较的代码。仅供参考。keil对一些库函数的编译会一直有警告,...
  • 根据json.org上的代码提炼出的接口,C语言json_checker(),检测字符串是否为json字符串
  • C语言字符串的基本操作

    千次阅读 2019-06-01 15:46:49
    C语言字符串的基本操作 用惯了c#和JavaScript,反过头来再学习c语言字符串操作,真是操碎了心。 这大概是高级语言和低级语言的区别吧。 复制字符串 截取字符串 查找字符串 字符串长度 字符串中大小写...
  • C语言 文本字符串和十六进制形式的相互转换 一、简述 记--C语言实现 文本形式的字符串和十六进制字符串的相互转换。如"01" <==> "3031" 有的数据包含不可见字符,直接打印出来会不可见或残缺,需要转换为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,385
精华内容 27,354
关键字:

c语言判断字符串结束

c语言 订阅