【问题标题】:Counting letter occurrences with strings in C [closed]用C中的字符串计算字母出现次数[关闭]
【发布时间】:2016-01-02 22:52:59
【问题描述】:

这个程序接收一个字母和字符串,当它在字符串中引入'FIM'时它会结束接收字符串。它保留在收到的信函中重复多次的字符串并将其全部打印出来。 它给了我一个错误,我不知道如何解决它(见内联评论):

#include <stdio.h>
#include <ctype.h>

#define MAX 101

int conta(char frase[], char letr) {
    int n = 1, i;
    int nmax = 0;
    char primeiro = tolower(frase[0]), stringn[MAX];

    do {
        printf("introduce string: ");
        gets(frase);
        for (i = 1; frase[i] != '\0'; i++) {
            if (tolower(frase[i]) == primeiro)
                n++;
        }
        if (nmax < n) {
            nmax = n;
            stringn[] == frase[];   /*Error!!*/
        }
    } while (frase != 'FIM');

    printf("The string where %c surgiu %d appeared more time is: %c ",
           letr, nmax, stringn);
}

void main() {
    char frase[MAX];
    char letr;

    printf("give a letter:");
    scanf("%c", &letr);
    conta(frase, letr);
}

【问题讨论】:

  • 在代码块中,它在表示错误的行中的“]”之前说这是一个错误
  • 我在错误的行中有一条评论说错误
  • 这一行在我看来不像是有效的 C。
  • 那么我怎样才能复制一个字符串以便我可以复制并保存它呢?
  • 能否给我一个strcpy Mr_pouet的使用例子

标签: c string words


【解决方案1】:

stringn[] == frase[] 是无效的 C 代码,要复制字符串,请使用 strcpy(stringn, frase)

请注意,您的代码还有许多其他问题:

  • frase != 'FIM' 也不正确,但编译器诊断将难以理解,因为您使用过时的 C 语法。要比较字符串,您应该使用strcmp。在这种情况下,strcmp(frase, "FIM") != 0。此外,您不应使用do / while 循环,因为在检查letr 的出现之前,您必须检查字符串是否匹配FIM

  • gets 已过时且存在风险。请改用fgets。请注意,fgets 读取的字符串如果输入,则末尾将包含'\n'

  • 您不应该将裸露的char 传递给tolower:如果char 类型是有符号的,您会为负字符值(例如非ASCII 字符)调用未定义的行为。使用以下语法:tolower((unsigned char)frase[0])

  • 您实际上计算了每行第一个字母的出现次数,而不是 letr 的出现次数。以这种方式初始化primeiroprimeiro = tolower((unsigned char)letr)

  • stringn 应初始化为空字符串,以防没有任何行出现 letr。使用strcpy(stringn, "");*stringn = '\0'; 或更好的方式执行此操作,这样定义:char stringn[MAX] = "";

【讨论】:

  • "strcpy(stringn, frase)" ?你不是说“strcmp(stringn, frase)”吗?
  • @Smallware:不,研究算法:当当前行出现次数最多时,OP 会尝试保存当前行。我不知道他为什么写string[] == frase[],但strcpy(stringn, frase); 适合他的目的。
猜你喜欢
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 2014-07-25
  • 2021-01-27
  • 2021-09-17
  • 2019-04-05
相关资源
最近更新 更多