一个小蚂蚁 发表于 2019-4-18 08:40:55

萌新求大佬帮助

#include <stdio.h>

#define MAX 1024

int main()
{
      char str1;
      char str2;

      char *target1 = str1;
      char *target2 = str2;

      char ch;
      int n;

      printf("请输入一个字符串到 str1 中:");
      fgets(str1, MAX, stdin);

      printf("请输入需要拷贝的字符个数:");
      scanf("%d", &n);

      printf("开始拷贝 str1 的内容到 str2 中...\n");
      while (n--)
      {
               ch = *target2++ = *target1++;
               if (ch == '\0')
               {
                     break;
               }
               if ((int)ch < 0)
               {
                     *target2++ = *target1++;
                     *target2++ = *target1++;
               }
      }

      *target2 = '\0';

      printf("拷贝完毕!\n");
      printf("现在,str2 中的内容是:%s\n", str2);

      return 0;
}
问题一:ch = *target2++ = *target1++;这句话的意思是不是1目标传给目标2,1目标自加;2目标再传给ch,并且2目标再自加??。
问题二:    if ((int)ch < 0)
               {
                     *target2++ = *target1++;
                     *target2++ = *target1++;
               }
if循环内的语句我用堆栈的思想怎么弄都觉的还少一条*target2++ = *target1++;,请问为什么不对呀,我卡在这个地方了,我也想过栈的思想,但是也不对,如下图:

jackz007 发表于 2019-4-18 09:28:07

本帖最后由 jackz007 于 2019-4-18 10:16 编辑

    1、就是这个意思,你的理解是完全正确的。

    2、关于一个汉字几个字节的问题与具体编码有关,比如,在 Windows 系统上,汉字一般采用 ANSI 和 unicode 编码,每个汉字占用 2 个字节,占用 3 个字节的是 utf-8 编码,是 Linux 系统采用汉字编码的标准,这种编码的汉字如不转码,在 Windows 系统会显示成乱码。

         其实,只要不是 unicode 编码,字符串拷贝,用下面的 2 行代码足矣:
for(i = 0 ; * target1 && i < n ; i ++) * target2 ++ = * target1 ++ ;
* target2 = '\0'                                                   ;

一个小蚂蚁 发表于 2019-4-18 09:51:12

jackz007 发表于 2019-4-18 09:28
1、就是这个意思,你的理解是完全正确的。

    2、关于一个汉字几个字节的问题与具体编码有关,比如 ...

哦哦,谢谢大佬,我知道了。
页: [1]
查看完整版本: 萌新求大佬帮助