zoukankan      html  css  js  c++  java
  • Linux 处理中文字符串 :/区分中文和英文的方法

    最近工作中遇到一个问题:要在一大堆 中文字符串中 分割 : 中文冒号:由于中文是unicode 所以用不了 strtok 函数。自己分割的第一步就是要自己找到固定中文字符的位置:

    #include <stdio.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <wchar.h>
    
    int chinese_or_english(char *str,int len)  
    {  
     // char *p=NULL;
     
    
      char chinese[4] = {0};  
      
      for (int i = 0; i < len; i++) {  
        
        if ((str[i] & 0x80) == 0) {   //chinese:the top is 1  
        
    	  // printf("alpha:%c
    ", str[i]);  
        }  
        
        else {  
          chinese[0] = str[i];  
          chinese[1] = str[i + 1];  
          chinese[2] = str[i + 2];  
          i++;    
          i++;
    		
        printf("chinese:%s i is %d
    ", chinese,i); 
    	if(strcmp(chinese,":")==0 )
    	{
    		//p=str+i;
    			printf("find >>>>>>>>>>>>>> chinese:%s i is %d
    ", chinese,i); 
    		return i;
    	}	
    		
    	
    	  
        }  
      }  
    }  
    
    
    
    
    
    
    
    
    
    
    
    
    
    int main()
    {
    	char buff_s[128]="我算出来了,等于:二";
    	printf("buff_s len is [%d]
    ",strlen(buff_s));
    	//char p=buff_s;
    	int i =0;
    	
    	
    	char want_buffer[64]={""};
    	
    	int n=0;
    	char *r=NULL;
    	n=chinese_or_english(buff_s,strlen(buff_s));
    	
    	int j=0;
    	printf("n is %d
    ",n);
    	if(n !=0)
    	{
    		//r=chinese_or_english+n;
    		
    		for(i=n+1;i<strlen(buff_s);i++)
    		{
    			want_buffer[j]=buff_s[i];
    			j++;
    			printf("i is %d
    ",i);
    		}
    	}
    	//want_buffer[i]='';
    	printf("want_buffer is %s
    ",want_buffer);
    	
    	
    	/*
    	for(i=0;i<30;i++)
    	{
    		
    		if(i%3==0 && i >0)
    		{
    			printf("%c%c%c
    ",buff_s[i-1],buff_s[i],buff_s[i+1]);
    			printf("
    ");
    		}
    			
    			
    		printf("%x ",buff_s[i]);	
    	}
    */
    	
    	
    	/*
    	while(p != ":")
    	{
    		printf("*p is %c
    ",*p);
    		p++;
    	}
    	
    	
    	printf("p====:,ps is %c%c
    ",*p,*(p+1));
    	
    	
    	
    	char*temp = strtok(buff_s,":");
        while(temp)
        {
            printf("%s 
    ",temp);
            temp = strtok(NULL,":");
        }
    	*/
    
    
        return 0;
    
    }
    

      

  • 相关阅读:
    mysql中drop、delete、truncate的区别简述
    hadoop之数据倾斜
    Mysql相关:navicat for mysql 加注释
    泛型
    工银亚洲见证开户详细过程和攻略
    classpath:和classpath*:的区别
    单索引与唯一索引
    MySQL中SQL语句之反引号,单引号
    《集体智慧编程》学习笔记 第三章
    《集体智慧编程》 读书笔记 第二章
  • 原文地址:https://www.cnblogs.com/hongzhunzhun/p/7268677.html
Copyright © 2011-2022 走看看