c語言中文和ascii碼字元分離

helloword小菜雞發表於2021-01-03

歡迎大家對程式進行修改,程式還存在很多不足,如需要手動在字串尾加結束符,陣列長度不好控制從而浪費空間等。註釋寫的有點長,請大家見諒

程式如下:

#include <stdio.h>
#include <string.h>

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;
}

輸出結果如下:
在這裡插入圖片描述

相關文章