鱼C论坛

 找回密码
 立即注册
查看: 735|回复: 0

S1E22 自整理。初次发帖!

[复制链接]
发表于 2020-2-7 20:50:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 liu10 于 2020-2-7 21:00 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. #define MAX 1024
  4. int main(){
  5.     #if(0)
  6.     // 使用 fgets 函数读取用户输入的字符串(英文),并用指针法来计算字符串的字符个数。      strlen
  7.         char str[MAX] ;
  8.         char *p = str;
  9.         int lenght = 0;

  10.         printf("请输入一串字符:");
  11.         fgets(p,MAX,stdin);                     //在这里fgets会默认将'\n'读取进去,默认加上'\0';
  12.         while (*p++!='\0')
  13.         {
  14.             lenght++;
  15.         }
  16.         printf("您输入的字符串的长度为:%d\n",lenght-1);         //默认的'\n'占位 所以要-1
  17.         printf("您输入的字符串是:%s",p-lenght-1);              // 此时指针已经到了'\0'的位置 减去'\0'的位置,减去 字符串的长度,回到指针的第一个地址
  18.         printf("您输入的字符串的长度为:%s",str);
  19.     #endif
  20.     #if(0)
  21.          // 使用 fgets 函数读取用户输入的字符串(中英文混入),并用指针法来计算字符串的字符个数。           strlen
  22.         char str[MAX] ;
  23.         char *p = str;
  24.         int lenght = 0;

  25.         printf("请输入一串字符:");
  26.         fgets(p,MAX,stdin);                                 //中文在数组中的存储特殊格式:(int)a[0] < 0 ; a[0]为汉字         
  27.         while (*p++!='\0')
  28.         {
  29.             lenght++;
  30.             if((int)(*p)<0){   
  31.                 p++;                                        // 汉字存储在两个字节单元,当遇到首个单元之后,指针加一,直接跳过第二个汉字
  32.             }
  33.         }
  34.         printf("您输入的字符串的长度为:%d\n",lenght-1);         
  35.         // printf("您输入的字符串是:%s",p-lenght-1);              
  36.         printf("您输入的字符串的长度为:%s",str);
  37.     #endif
  38.     #if(0)
  39.         //使用 fgets 函数读取用户输入的字符串(英文)并存储到字符数组 str1 中,并利用指针,将 str1 中的字符串拷贝到字符数组 str2 中     strcpy
  40.         char str1[MAX] , str2[MAX] ;
  41.         char *p1 = str1 , *p2 = str2;
  42.         printf("请输入一段字符串:");
  43.         fgets(str1,MAX,stdin);
  44.         while ((*p2++=*p1++)!='\0')
  45.         {

  46.         }
  47.         printf("str:%s",str1);
  48.         printf("str2:%s",str2);
  49.     #endif
  50.     #if(0)
  51.         //使用 fgets 函数读取用户输入的字符串(英文)并存储到字符数组 str1 中,并利用指针,将 str1 中的字符串拷贝到字符数组 str2 中  strncpy
  52.         // 并且用户可以指定 拷贝内容的大小
  53.         char str1[MAX] , str2[MAX] ;
  54.         char *p1 = str1 , *p2 = str2;
  55.         int lenth ;
  56.         printf("请输入一段字符串:");   
  57.         fgets(str1,MAX,stdin);                                          // 这个地方有一个回车,fgets在这里已经接收
  58.         printf("请输入您想拷贝的内容的长度:");
  59.         scanf("%d",&lenth);
  60.         while (lenth--)
  61.         {
  62.             *p2++=*p1++;
  63.         }
  64.         *p2='\0';                                                       //字符串结束标识符  
  65.         printf("str:%s",str1);
  66.         printf("str2:%s\n",str2);
  67.     #endif
  68.     #if(0)
  69.         //  使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来     strcat
  70.         char str1[MAX] , str2[MAX];
  71.         char *p1 = str1 , *p2 = str2;
  72.         
  73.         printf("请输入一段字符串:");
  74.         fgets(str1,MAX,stdin);
  75.         printf("请在输入一段字符串:");
  76.         fgets(str2,MAX,stdin);                                          //接收用户的输入

  77.         printf("正在拼接请您稍等.........\n");
  78.         while (*(p1++)!='\n');                                            // str1指针的位置到最后一个字母处
  79.         p1--;                                                             //此时p1指针在'\n'的位置p1--退回一个字节
  80.         while ((*p1++=*p2++)!='\0');                                       
  81.         printf("拼接完成\n拼接后的字符串为:%s",str1);
  82.     #endif
  83.     #if(0)
  84.          //  使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,(含中文输入)并打印出来     strncat
  85.          char str1[MAX] , str2[MAX];
  86.         char *p1 = str1 , *p2 = str2;
  87.         int length;
  88.         printf("请输入一段字符串:");
  89.         fgets(str1,MAX,stdin);
  90.         printf("请在输入一段字符串:");
  91.         fgets(str2,MAX,stdin);                                          //接收用户的输入
  92.         printf("请输入您想拷贝的内容的长度:");
  93.         scanf("%d",&length);

  94.         printf("正在拼接请您稍等.........\n");
  95.         while (*(p1++)!='\n');                                            // str1指针的位置到最后一个字母处
  96.         p1--;                                                             //此时p1指针在'\n'的位置p1--退回一个字节
  97.         while (length--){
  98.             if((int)(*p2)<0){
  99.                 *p1++=*p2++;                                              //当为汉字的时候,需要存入两次值
  100.             }   
  101.              *p1++=*p2++;
  102.         };               
  103.         *p1 ='\0';
  104.         printf("拼接完成\n拼接后的字符串为:%s\n",str1);
  105.     #endif
  106.     #if(0)
  107.     // 使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,            
  108.     // 如果两个字符串完全一致,打印“完全一致”;如果存在不同,打印第一处不同的位置(索引下标)                   strcmp
  109.         char str1[MAX] , str2[MAX];
  110.         char *p2 = str2 , *p1 = str1;
  111.         int index =1;
  112.         printf("请输入一段字符串:");
  113.         fgets(str1,MAX,stdin);
  114.         printf("请在输入一段字符串:");
  115.         fgets(str2,MAX,stdin);         

  116.         while (*p1!='\0' && *p2!='\0')                                  //当两个字符串每位都不为'\0'的时候代表两个字符串目前一致
  117.         {   
  118.             if(*p1++ != *p2++){                                         //如果两个字符串出现不一致的时候,返回index
  119.                 break;
  120.             }
  121.             index++;
  122.         }
  123.         if(*p1 =='\0' && *p2=='\0'){                                    //到最后两个字符串的最后一位全部为'\0'表示全部一致
  124.             printf("两个字符串完全一致\n");
  125.         }else
  126.         {
  127.             printf("两个字符串不完全一致,在%d位出现问题\n",index);
  128.         }
  129.     #endif
  130.    
  131.     #if(1)
  132.     // 使用 fgets 函数接收用户输入的两个字符串(中英文混入)到 str1 和 str2 中,对比 str1 和 str2,            
  133.     // 如果两个字符串完全一致,打印“完全一致”;如果存在不同,打印第一处不同的位置(索引下标) 指定比较前几位                  strncmp
  134.         char str1[MAX];
  135.         char str2[MAX];

  136.         char *target1 = str1;
  137.         char *target2 = str2;

  138.         char ch;
  139.         int index = 1, n;

  140.         printf("请输入第一个字符串:");
  141.         fgets(str1, MAX, stdin);

  142.         printf("请输入第二个字符串:");
  143.         fgets(str2, MAX, stdin);

  144.         printf("请输入需要对比的字符个数:");
  145.         scanf("%d", &n);

  146.         while (n && *target1 != '\0' && *target2 != '\0')                                   // n 以及两个字符串每位是否不为'\0'控制着循环
  147.         {
  148.                 ch = *target1;
  149.                 if (ch < 0)
  150.                 {
  151.                         if (*target1++ != *target2++ || *target1++ != *target2++)           //当 为汉字的时候,如果两个存储空间的值不相等的话break;
  152.                         {                                                                   // break;后面的代码将不在执行,直接打印出来 字符串不完全相同
  153.                                 break;
  154.                         }
  155.                 }
  156.                 else                                    
  157.                 {                                                                           //如果不是汉字的时候,进行两个字符的判断是否相等,不相等就break;
  158.                     if (*target1++ != *target2++)                                    // 课后作业的答案感觉有问题,比较完汉字之后都会进入到这个循环内。
  159.                     {
  160.                         break;
  161.                     }
  162.                 }
  163.                
  164.                 index++;
  165.                 n--;
  166.         }
  167.         if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
  168.         {
  169.                 printf("两个字符串的前 %d 个字符完全相同!\n", index-1);
  170.         }
  171.         else
  172.         {
  173.                 printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
  174.         }
  175.     #endif
  176.     system("pause");
  177. }[p=30, 2, left][/p]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表