c语言中文和ascii码字符分离

欢迎大家对程序进行修改,程序还存在很多不足,如需要手动在字符串尾加结束符,数组长度不好控制从而浪费空间等。注释写的有点长,请大家见谅

程序如下:

#include 
#include 

int main(void)
{
     
    char str[] = "王恺123啊哈wang";
	char str1[20], str2[20];
	int i,j,k;

	for(i = 0, j = 0,k = 0; i < strlen(str);++i)
	{
     
		if(0 != (str[i] >> 7)) //中文字符最高位为1,ascii码最高位为0,
		                       //因此将最高位数字左移7位,
		                       //不等于0的是中文字符,
		                       // 等于0的是ascii码
		{
     
			str1[k] = str[i]; //将str中文字符第一个字节
			                  //放到str1的第一个字节位置
			++i;
			k++;
			str1[k] = str[i]; //将str中文字符第二个字节
			                  //放到str1的第二个字节位置
			k++;
	
		}
		else
		{
     
			str2[j] = str[i];
			j++;
			
		}
	}
	str1[k] = '\0'; //字符串后面需要加结束符,
	str2[j] = '\0';//否则用puts()输出不会自动结束,会出现乱码
	puts(str1);
	puts(str2); 
	
	return 0;
}

输出结果如下:
c语言中文和ascii码字符分离_第1张图片

你可能感兴趣的:(c语言中文和ascii码字符分离)