qq1242009750 发表于 2016-5-24 00:54:47

求助,比较两个字符串

#include <stdio.h>

#define MAX 1024

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

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

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

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

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

      printf("比较的结果是:%d\n", str1 - str2);    //这里的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;
}
程序执行后,可以看得出来,两者的结果是不同的:
$ 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

qq1242009750 发表于 2016-5-24 11:43:19

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

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

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

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

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

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

qq1242009750 发表于 2016-5-24 11:51:09

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

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

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

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

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

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

GRRRARD 发表于 2016-6-6 21:50:02

先赋值再移动指针不是应该从0开始么,为什么你会认为从第一个开始呢?

李星 发表于 2016-6-6 22:40:34

qq1242009750 发表于 2016-5-24 11:51
while ((str1 = getchar()) != '\n')小甲鱼老师,这句话是从str1处开始存放字符吗?

我的理解是...

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