liu10 发表于 2020-2-7 20:50:58

S1E22 自整理。初次发帖!

本帖最后由 liu10 于 2020-2-7 21:00 编辑

#include<stdio.h>
#include<stdlib.h>

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

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

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

      }
      printf("str:%s",str1);
      printf("str2:%s",str2);
    #endif
    #if(0)
      //使用 fgets 函数读取用户输入的字符串(英文)并存储到字符数组 str1 中,并利用指针,将 str1 中的字符串拷贝到字符数组 str2 中strncpy
      // 并且用户可以指定 拷贝内容的大小
      char str1 , str2 ;
      char *p1 = str1 , *p2 = str2;
      int lenth ;
      printf("请输入一段字符串:");   
      fgets(str1,MAX,stdin);                                          // 这个地方有一个回车,fgets在这里已经接收
      printf("请输入您想拷贝的内容的长度:");
      scanf("%d",&lenth);
      while (lenth--)
      {
            *p2++=*p1++;
      }
      *p2='\0';                                                       //字符串结束标识符
      printf("str:%s",str1);
      printf("str2:%s\n",str2);
    #endif
    #if(0)
      //使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来   strcat
      char str1 , str2;
      char *p1 = str1 , *p2 = str2;
      
      printf("请输入一段字符串:");
      fgets(str1,MAX,stdin);
      printf("请在输入一段字符串:");
      fgets(str2,MAX,stdin);                                          //接收用户的输入

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

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

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

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

      char ch;
      int index = 1, n;

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

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

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

      while (n && *target1 != '\0' && *target2 != '\0')                                 // n 以及两个字符串每位是否不为'\0'控制着循环
      {
                ch = *target1;
                if (ch < 0)
                {
                        if (*target1++ != *target2++ || *target1++ != *target2++)         //当 为汉字的时候,如果两个存储空间的值不相等的话break;
                        {                                                                   // break;后面的代码将不在执行,直接打印出来 字符串不完全相同
                              break;
                        }
                }
                else                                    
                {                                                                           //如果不是汉字的时候,进行两个字符的判断是否相等,不相等就break;
                  if (*target1++ != *target2++)                                    // 课后作业的答案感觉有问题,比较完汉字之后都会进入到这个循环内。
                  {
                        break;
                  }
                }
               
                index++;
                n--;
      }
      if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
      {
                printf("两个字符串的前 %d 个字符完全相同!\n", index-1);
      }
      else
      {
                printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
      }
    #endif
    system("pause");
}
页: [1]
查看完整版本: S1E22 自整理。初次发帖!