【问题标题】:My string compare is coming out wrong我的字符串比较出错了
【发布时间】:2014-08-01 18:57:50
【问题描述】:

嗨,我的程序是输入一个数字,该数字给出字符串的长度,然后是字符串,最后是一个字母,它应该告诉我该字母在字符串中出现的次数。目前为了帮助我找出我的代码有什么问题,我可以看到 strcmp 导致相同的 ascii 数字但为负数。例如,对于字母 a,数字是 97,但 strcmp 给出 -97,因此 strcmo 不会将字符显示为字符串中的字符并导致错误的结果。任何帮助将不胜感激。谢谢 #包括 #包括

int main(void)
{
  char myChar[100], z, k;
  int counter, n, g=0, r, i, l;
  counter=0;
  scanf("%d",&n);
  while (counter<n)
  {
    counter++;
    scanf(" %c",&myChar[counter]);
  }

  scanf(" %s", &z);

  for(i=0;i<n+1;++i)
  {
    k=myChar[i];
    r=strcmp(&z, &k); 
    l=r;    
    //printf("\n%c", myChar[i]);
    printf("%d\n", l);
    if(r==0)
    {
        g++;
        printf("%d\n", g);
    }
  }
  printf("\n\n%d\n", g);


  return (0);
}

【问题讨论】:

  • strcmp 需要以空值结尾的字符串。 &amp;z&amp;k 不是,除非 zk 都是空字符。甚至在此之前,%s 需要空间来存储它存储的字符串。除非输入什么都没有,否则它将超出&amp;k 的范围。
  • 您是在比较单个字符,而不是字符串。
  • 您需要返回并重新了解单个字符 (char) 和字符串(以不同方式表示为 char*char[n])之间的区别。这在 C 中非常令人困惑。
  • @HotLicks: char* 可以指向一个字符串;它本身不是一个字符串。根据定义,“字符串”是“由第一个空字符终止并包括第一个空字符的连续字符序列”,而不是指针。
  • @KeithThompson - 我说的是“代表”;我没有说“是”。事实上,这就是问题的最大部分——C 中的“字符串”实际上并不存在。只有程序员的想象力才能使某些东西成为“字符串”。

标签: c string strcmp


【解决方案1】:
#include <stdio.h>
#include <string.h>

int main(void){
    char myChar[100], str[64];//
    int counter, n;
    int i, j, k;

    printf("number of charactors : ");
    scanf("%d",&n);

    for (i=0; i<n; ++i){
        scanf(" %c", &myChar[i]);
    }

    printf("input string : ");
    scanf("%63s", str);//"%s" : The useless one letter to input as a string. "%c" for &z

    for(i=0;i<n;++i){
        counter = 0;
        for(j=0;str[j]!='\0'; ++j){
            k = (str[j] == myChar[i]);//Comparison of each character
            counter += k;//if(str[j] == myChar[i]) ++counter;
        }
        printf("%c is %d\n", myChar[i], counter);
    }

    return (0);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多