加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言的字符串倒置问题

发布时间:2020-12-13 22:15:37 所属栏目:百科 来源:网络整理
导读:#include stdio.hint main(){char c[] = "hello world";int len = 0;while (c[len])//此法求出的长度即为字符串的有效长度{len++;//如果到了字符串的结尾,则不再加1}printf("%dn",len);int le = 0;while (c[le++]);//此法求出的长度比字符串的有效长度多1p


#include <stdio.h>
int main()
{
	
	char c[] = "hello world";
	int len = 0;
	while (c[len])//此法求出的长度即为字符串的有效长度
	{
		len++;//如果到了字符串的结尾,则不再加1
	}
	printf("%dn",len);
	
	int le = 0;
	while (c[le++]);//此法求出的长度比字符串的有效长度多1
	printf("%dn",le);
	


	//字符串(仅含字母)倒置
	
	char c[] = "hello world";
	int len=0;
	while (c[len++]);
	len--;

	int min = 0;
	int max = len - 1;
	while (min<max)
	{
		char temp = c[min];
		c[min] = c[max];
		c[max] = temp;
		min++;
		max--;
	}
	
	printf("%s",c);
	

	//字符串倒置(汉字)
	char c[] = "你好世界";
	int len = 0;
	while (c[len++]);
	len--;
	printf("%dn",len);//输出8,因为一个汉字占两个字节

	int min = 0;
	int max = len - 1;
	while (min < max)
	{
		char temp = c[min];
		c[min] = c[max-1];
		c[max-1] = temp;

		temp = c[min+1];
		c[min+1] = c[max];
		c[max] = temp;

		min+=2;
		max-=2;
	}
	printf("%s",c);


	getchar();
	return 0;
}
如果按照与纯字母倒置的方法对汉字的字符串进行倒置的话,结果会乱码:

因为:


修改以后则正确:

需要说明的是,如果一个字符串中既含有汉字又含有字母的话会比较复杂,但一个有用的规律是,汉字占两个字节的第一个字节用%d输出会是一个负数,而字母则不是。

例如:


图中的buf[0]即为汉字的“你”的第一个字节。

所以统计一个含有字母和汉字的字符串中字符的个数(而不是字节的个数)的方法为:

        char buf[] = "你好abc";
	int len = 0;
	int i = 0;
	while (buf[i])
	{
		if (buf[i] < 0)//说明是汉字
		{
			i += 2;//前进两个字节
		}
		else
		{
			i++;
		}
		len++;
	}

	printf("%dn",len);
输出的即为含有的字符个数:5。

汉字在Linux系统中是以utf-8的方式进行编码的,占3个字节。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读