#include <stdio.h>
int main()
{
char c[] = "hello world";
int len = 0;
while (c[len])//此法求出的长度即为字符串的有效长度
{
len++;//如果到了字符串的结尾,则不再加1
}
printf("%d\n", len);
int le = 0;
while (c[le++]);//此法求出的长度比字符串的有效长度多1
printf("%d\n", 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("%d\n", 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("%d\n", len);
输出的即为含有的字符个数:5。
汉字在Linux系统中是以utf-8的方式进行编码的,占3个字节。