答案错误
代码是进阶的答案,#include <stdio.h>#define MAX 1024
int main()
{
char str;
char *target = str;
char ch;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (1)
{
ch = *target++;
if (ch == '\0')
{
break;
}
if ((int)ch < 0)
{
target += 2;
}
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
} 本帖最后由 jackz007 于 2019-12-22 12:40 编辑
两个问题:
1、通过 fgets() 获取的字符串最后那个字符一定是换行符 '\n',而这个换行符显然并非我们所预期,所以,应该检测换行符,而不是 '\0';
2、if(ch < 0) 时,target ++ 就够了,target += 2 就过了。
ch = * target++ ; // 这里 target 加过了
. . . . . .
if ((int)ch < 0)
{
target += 2 ; // 这里 target 应该 + 1,+ 2 就错了。
下面是我修改的版本,供楼主参考
#include <stdio.h>
#define MAX 1024
int main()
{
char str ;
char * target = str ;
int length = 0 ;
printf("请输入一个字符串:") ;
fgets(str , MAX , stdin) ;
for(length = 0 ; length < MAX && * target != '\n' ; length ++ , target ++) if(* target < 0) target ++ ;
* target = '\0' ;
printf("您总共输入了 %d 个字符!\n", length) ;
}
编译、运行实况:
C:\Bin>g++ -o x x.c
C:\Bin>x
请输入一个字符串:TDM GCC32 5.1.0 开发环境设置完毕
您总共输入了 24 个字符!
C:\Bin> #include <stdio.h>
#define MAX 1024
int main()
{
char str;
char *target = str;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (1)
{
if (*target == '\0')
{
break;
}
if ((int)*target < 0)
{
target += 2;
}
else
{
target++;
}
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
Tec 发表于 2019-12-22 12:20
谢谢 jackz007 发表于 2019-12-22 12:18
两个问题:
1、通过 fgets() 获取的字符串最后那个字符一定是换行符 '\n',而这个换行符显 ...
老哥,你这个写的好是好,但对于新手。。。。。 jackz007 发表于 2019-12-22 12:18
两个问题:
1、通过 fgets() 获取的字符串最后那个字符一定是换行符 '\n',而这个换行符显 ...
是不是因为是中文,所有是target += 2 ,一个中文不是占2个字节吗?
本帖最后由 jackz007 于 2019-12-22 14:11 编辑
最后的魁拔 发表于 2019-12-22 14:03
老哥,你这个写的好是好,但对于新手。。。。。
这个逻辑还不简单?从字符串开头到末尾的 '\n' 字符循环枚举,每次循环字符计数加 1,字符串指针加 1,遇到中文字符则字符串指针再加 1(Windows 平台,如果是 Linux 平台,字符串指针的确应该加 2)。 jackz007 发表于 2019-12-22 14:10
这个逻辑还不简单?从字符串开头到末尾的 '\n' 字符循环,每次循环字符计数加 1,字符串指针加 1, ...
好吧。谢谢 jackz007 发表于 2019-12-22 14:10
这个逻辑还不简单?从字符串开头到末尾的 '\n' 字符循环枚举,每次循环字符计数加 1,字符串指针 ...
老哥,循环的时候,你那个字符串指针加一,如果遇到中文,字符串指针再加一,是不是就是相当于,中文的字符串指针加2了 最后的魁拔 发表于 2019-12-22 14:21
老哥,循环的时候,你那个字符串指针加一,如果遇到中文,字符串指针再加一,是不是就是相当于,中文的字 ...
是的,Windows 系统中文字符采用 GBK 编码,每个汉字占用 2 个字节,Linux 系统中文字符采用 UTF-8 编码,每个汉字占用的是 3 个字节。 jackz007 发表于 2019-12-22 14:37
是的,Windows 系统中文字符采用 GBK 编码,每个汉字占用 2 个字节,Linux 系统中文字符采用 UTF-8 ...
谢谢
页:
[1]