【问题标题】:Counting character in string计算字符串中的字符
【发布时间】:2014-03-13 19:16:55
【问题描述】:

此代码的目的是计算输入字符在输入字符串中的使用次数。

代码是这样的,它给出 false 输出 K=41 并且警告比较由于数据类型范围有限而总是 false。

int main()
{
    int i,k,x=0;
    char ch;
    char str[1000];
    printf("Write your Word!\n");
    gets(str);
    printf("Write character to Search\n");
    scanf("%c",&ch);
    x=strlen(str);
    printf("%d",x);
    printf("%d",k);
          for(i=0;i!=x-1;i++){
             if(str[i]=='ch'){

              k++; }           
              }           
     printf("%d times used",k);
     getch();

 return 0;


    }

【问题讨论】:

  • k 未初始化
  • 比较警告是因为str[i]=='ch'str[i] 是 1 个字符,您与 2 个字符比较
  • 未初始化是什么意思?我应该在哪里启动 k?在 if 循环中?
  • 在声明中初始化kint i,k=0,x=0;
  • @AlterMann 像你说的那样初始化了 k,但它仍然给出 0。为什么?

标签: c comparison


【解决方案1】:

一些问题:你没有初始化k,比较应该是变量ch,而不是常量'ch'。这应该可以(请注意,我还更改了您的printfs 以获得更清晰的输出):

int main() 
{
    int i,k=0,x=0;
    char ch;
    char str[1000];
    printf("Write your Word!\n");
    gets(str);
    printf("Write character to Search\n");
    scanf("%c",&ch);
    x=strlen(str);
    printf("strlen = %d\n",x);
    for(i=0;i!=x-1;i++){
        if(str[i]==ch){
            k++; }             
        }                 
     printf("%d times used\n",k);
     getch();
     return 0;

}

【讨论】:

  • 'ch' 不是字符串(即"ch");它是一个多字符int 常量。
  • 为了完美,gets() 不应该在那里。改用fgets() 并没有什么坏处。 gets() 很旧,很臭,应该永远使用。它甚至从 C11 中删除。
  • 好的,非常感谢,半小时都找不到。
  • @FilipeGonçalves 我是新手,为什么 gets() 很臭有什么区别?
  • @user1944312 因为它不知道你的缓冲区大小,所以它可能会溢出。换句话说,如果用户输入的数据超出了缓冲区的容量,gets() 将愉快地写入超过限制。 fgets() 接收缓冲区的大小,因此如果没有剩余空间,它将停止。在您的代码中,只需将gets(str) 替换为fgets(str, sizeof str, stdin) 即可。这是一项重大改进。
猜你喜欢
  • 2019-09-14
  • 2023-04-06
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
相关资源
最近更新 更多