Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我希望我的代码按照字符串的出现顺序打印字符的频率_C - Fatal编程技术网

C 我希望我的代码按照字符串的出现顺序打印字符的频率

C 我希望我的代码按照字符串的出现顺序打印字符的频率,c,C,我的代码是按随机顺序打印字符的频率。可以做些什么,以便它按照给定单词的顺序打印字符的频率。我目前的代码如下 #include <stdio.h> #include <conio.h> void main() { char string1[50]; int i = 0, counter[26] = { 0 }; printf("\nEnter a string\n"); //Inputs a string gets(string1)

我的代码是按随机顺序打印字符的频率。可以做些什么,以便它按照给定单词的顺序打印字符的频率。我目前的代码如下

#include <stdio.h>
#include <conio.h>

void main() {
    char string1[50];
    int i = 0, counter[26] = { 0 };
    printf("\nEnter a string\n");
    //Inputs a string
    gets(string1);
    while (string1[i] != '\0') {
        //checks and includes all the characters 
        if (string1[i] >= 'a' && string1[i] <= 'z') {
            //counts the frequency of characters
            counter[string1[i] - 'a']++;
            i++;
        }
    }
    //printing frequency of each character     
    for (i = 0; i < 26; i++) {
        if (counter[i] != 0)
            printf("%c occurs %d times.\n", i + 'a', counter[i]);
    }
    getch();
}
#包括
#包括
void main(){
charstring1[50];
int i=0,计数器[26]={0};
printf(“\n输入字符串\n”);
//输入一个字符串
获取(string1);
while(string1[i]!='\0'){
//检查并包含所有字符

如果(string1[i]>='a'&&string1[i]代码中有几个问题:

  • 使用
    获取
    :此函数不安全,已从当前版本的C标准中删除
  • 仅当
    string1[i]
    是小写字母时,才可以对
    i
    进行递增:如果键入任何其他字符,将运行无限循环
  • main
    的合适原型是
    intmain(void)
    intmain(intarc,char*argv[])
  • 您只计算小写字母。
    H
    是大写字母,因此不计算
以下是一个改进的版本:

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

int main(void) {
    char string1[128];
    int i = 0, counter[256] = { 0 };
    printf("\nEnter a string\n");
    //Inputs a string
    if (fgets(string1, sizeof string1, stdin) == NULL) {
        // empty file: got an empty line
        *string1 = '\0';
    }
    for (i = 0; string1[i] != '\0'; i++) {
        if (isalpha((unsigned char)string1[i])) {
            //counts the frequency of letters
            counter[string1[i]]++;
        }
    }
    //printing frequency of each counted character
    //characters are printed in the order of appearance
    for (i = 0; string1[i] != '\0'; i++) {
        if (counter[string1[i]] != 0) {
            printf("%c occurs %d times.\n",
                   string1[i], counter[string1[i]]);
            counter[string1[i]] = 0;   // print each letter once.
        }
    }
    getch();
    return 0;
}
#包括
#包括
内部主(空){
charstring1[128];
int i=0,计数器[256]={0};
printf(“\n输入字符串\n”);
//输入一个字符串
if(fgets(string1,string1的大小,stdin)=NULL){
//空文件:得到一个空行
*string1='\0';
}
对于(i=0;string1[i]!='\0';i++){
if(isalpha((无符号字符)string1[i])){
//计算字母的频率
计数器[string1[i]]++;
}
}
//每个计数字符的打印频率
//字符按外观顺序打印
对于(i=0;string1[i]!='\0';i++){
if(计数器[string1[i]!=0){
printf(“%c出现%d次。\n”,
string1[i],counter[string1[i]];
计数器[string1[i]]=0;//每个字母打印一次。
}
}
getch();
返回0;
}

第二次使用字符串生成输出,可以按字符的外观顺序打印字符

在“打印每个字符的频率”部分,使用代码处理输入字符串。这一次,如果频率值不为零,则打印它,然后将频率值重置为零。如果频率值为零,则必须已打印它,因此不要执行任何操作

//printing frequency of each counted character (in input order)
for (i = 0; string1[i] != '\0'; i++) {
    char ch = string[i];
    if (counter[ch - 'a'] != 0) {
        printf("%c occurs %d times.\n", ch, counter[ch - 'a']);
        counter[ch - 'a'] = 0;
    }
}

您的问题有点不清楚。您的意思是,除了跳过字符串中的第一个字符外,代码工作正常吗?它没有打印字符串中第一个字符的频率。除此之外,它打印字符串中的所有字符显示一些示例输入、实际输出和预期输出。您的编辑显示代码按预期工作。输入字符串
hello
包含1
e
、1
h
、2
l
和1
o
,这就是打印的内容。那么到底是什么问题?我希望它按顺序打印。第一个字符-它的出现、第二个字符它的出现、第三个字符它的出现,然后更新为代码按外观顺序打印字母,无重复。