鱼C论坛

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

S1E22 自整理。初次发帖!

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

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

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

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

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

        printf("请输入一串字符:");
        fgets(p,MAX,stdin);                                 //中文在数组中的存储特殊格式:(int)a[0] < 0 ; a[0]为汉字          
        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[MAX] , str2[MAX] ;
        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[MAX] , str2[MAX] ;
        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[MAX] , str2[MAX];
        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[MAX] , str2[MAX];
        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[MAX] , str2[MAX];
        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[MAX];
        char str2[MAX];

        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");
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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