鱼C论坛

 找回密码
 立即注册
查看: 2325|回复: 5

[已解决]求助,比较两个字符串

[复制链接]
发表于 2016-5-24 00:54:47 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

#define MAX 1024

int main()
{
        char str1[MAX];
        char str2[MAX];
        int i = 0;
        unsigned int n;

        printf("请输入第一个字符串:");
        while ((str1[i++] = getchar()) != '\n')     //这里的str1[i++]是什么意思? 是从str[1]开始输入字符吗?
                                                                        //还有为什么在 “请输入第一个字符串:”的后面会输出我输入的字符
                    ;

        printf("请输入第二个字符串:");
        i = 0;
        while ((str2[i++] = getchar()) != '\n')
                ;

        printf("请输入比较的字符数:");
        scanf("%u", &n);

        for (i = 0; i < n; i++)
        {
                if (str1[i] - str2[i])
                {
                        i++;                                        //这里的i++是什么意思??
                        break;
                }
        }

        printf("比较的结果是:%d\n", str1[i-1] - str2[i-1]);    //这里的i-1也不明白。。

        return 0;
}
最佳答案
2016-5-24 02:15:04
当我们需要对一个变量加一或减一并赋值给自己的时候,我们可以写成i++、i—或++i、--i的形式。它们也被称为增量减量运算符,或++--运算符。

自增自减运算符可以放在变量之前,也可以放在变量之后。它们有什么区别呢?粗略地看,++i和i++都是实现将变量i的值加一并赋值给本身,也就相当于i = i + 1。

但是将++i和i++赋值给一个变量的时候,两者的差异就产生了:
#include <stdio.h>

int main()
{
        int i = 5, j;

        j = ++i;
        printf("i = %d, j = %d\n", i, j);

        i = 5;
        j = i++;
        printf("i = %d, j = %d\n", i, j);

        return 0;
}
程序执行后,可以看得出来,两者的结果是不同的:
[fishc@localhost s1e16]$ gcc test1.c && ./a.out
i = 6, j = 6
i = 6, j = 5
它们的区别是:i++是先使用变量i中保存的值,再对自身进行++运算;而++i则是先对自身进行++运算,再使用变量i的值(这时候变量i的值已经加一了)。

另外,自增、自减运算符只能作用于变量,而不能作用于常量或表示。


这一讲视频可以帮到你:http://v.qq.com/page/y/h/n/y0301ylz1hn.html

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

使用道具 举报

发表于 2016-5-24 02:15:04 | 显示全部楼层    本楼为最佳答案   
当我们需要对一个变量加一或减一并赋值给自己的时候,我们可以写成i++、i—或++i、--i的形式。它们也被称为增量减量运算符,或++--运算符。

自增自减运算符可以放在变量之前,也可以放在变量之后。它们有什么区别呢?粗略地看,++i和i++都是实现将变量i的值加一并赋值给本身,也就相当于i = i + 1。

但是将++i和i++赋值给一个变量的时候,两者的差异就产生了:
#include <stdio.h>

int main()
{
        int i = 5, j;

        j = ++i;
        printf("i = %d, j = %d\n", i, j);

        i = 5;
        j = i++;
        printf("i = %d, j = %d\n", i, j);

        return 0;
}
程序执行后,可以看得出来,两者的结果是不同的:
[fishc@localhost s1e16]$ gcc test1.c && ./a.out
i = 6, j = 6
i = 6, j = 5
它们的区别是:i++是先使用变量i中保存的值,再对自身进行++运算;而++i则是先对自身进行++运算,再使用变量i的值(这时候变量i的值已经加一了)。

另外,自增、自减运算符只能作用于变量,而不能作用于常量或表示。


这一讲视频可以帮到你:http://v.qq.com/page/y/h/n/y0301ylz1hn.html

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-5-24 11:43:19 | 显示全部楼层
小甲鱼 发表于 2016-5-24 02:15
当我们需要对一个变量加一或减一并赋值给自己的时候,我们可以写成i++、i—或++i、--i的形式。它们也被称为 ...

while ((str1[i++] = getchar()) != '\n')  小甲鱼老师,这句话是从str1[1]处开始存放字符吗?

我的理解是   i的初始化是0,所以 第一次循环 str1[i++] = str1[1],然后把输入的字符放入str1[1]吗?

我还有一个疑问getchar()这个函数不是从键盘缓冲区中读取ASCALL码吗?为什么我输入的字符会在屏幕上显示出来

      printf("请输入比较的字符数:");      假如我这里比较的是5个字符
        scanf("%u", &n);

        for (i = 0; i < n; i++)      
        {
                if (str1[i] - str2[i])
                {
                        i++;                                    
                        break;
                }

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

使用道具 举报

 楼主| 发表于 2016-5-24 11:51:09 | 显示全部楼层
小甲鱼 发表于 2016-5-24 02:15
当我们需要对一个变量加一或减一并赋值给自己的时候,我们可以写成i++、i—或++i、--i的形式。它们也被称为 ...

while ((str1[i++] = getchar()) != '\n')  小甲鱼老师,这句话是从str1[1]处开始存放字符吗?

我的理解是   i的初始化是0,所以 第一次循环 str1[i++] = str1[1],然后把输入的字符放入str1[1]吗?

我还有一个疑问getchar()这个函数不是从键盘缓冲区中读取ASCALL码吗?为什么我输入的字符会在屏幕上显示出来

      printf("请输入比较的字符数:");      假如我这里比较的是5个字符
        scanf("%u", &n);

        for (i=0; i < n; i++)            那么n=5,这个循环执行5次
        {
                if (str1[i] - str2[i])      
                {
                        i++;                    这里的i++是自增1,如果 str1[1] = str2[1]时 i自增1,然后就               
                        break;          执行break语句,跳出if语句。跳出if语句后 for语句还会执行i++吗?                          
                }                          

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

使用道具 举报

发表于 2016-6-6 21:50:02 | 显示全部楼层
先赋值再移动指针不是应该从0开始么,为什么你会认为从第一个开始呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-6 22:40:34 | 显示全部楼层
qq1242009750 发表于 2016-5-24 11:51
while ((str1 = getchar()) != '\n')  小甲鱼老师,这句话是从str1[1]处开始存放字符吗?

我的理解是  ...

  兄弟你的思路卡在了已开始呢,i++的意思是执行后加1,就是说把i本来的带进来后进行运算然后再把自身加1,++i就是把i本身的值加上1再进行计算.
    getchar()函数是会得到用户的输入并且会显示在屏幕上
    getch()函数是只要有输入就会返回,并且不会回显;
  在for循环中的i的作用是来拿遍历字符串的地址的,简单的说就是可以让两个字符串对应的一个一个的字符拿来对比,if语句中第一次是比较死一个也就是str[0],,在这里我认为你没有写完整还是你把符号写错了,str1[] - str2[]这不是一个判断句阿......  当判断之后就要进行i的自加进行下一次的比较阿!!!!!
    最后调到了printf时的i的值是满足了跳出循环的条件了,所以满足之前题目的 条件的是在此时的i-1的那里....
    我比较空闲,这种问题你其实多想想就好了,如果有其他的问题也可以问我,我的水平也是才进来一点点......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 02:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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