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个字节。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |