此代碼不起作用,數字 0 到 9 在給定字串中重復了多少次。
這是來自hackerrank的問題:
給定一個由字母和數字組成的字串 S,找出給定字串中每個數字出現的頻率。
我在我的邏輯中找不到任何錯誤。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
char s[1000];
int count[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char temp;
scanf("%s", s);
for (int i = 0; i < 10; i )
{
temp = i;
for (int j = 0; j < strlen(s); j )
{
if (s[j] == i)
{
count[i] = count[i] 1;
continue;
}
else
{
continue;
}
}
}
for (int k = 0; k < 10; k )
{
printf("%d ", count[k]);
}
return 0;
}
uj5u.com熱心網友回復:
至少你需要寫
if (s[j] == i '0')
否則,您正在嘗試比較這樣的字符'0',可以將 ASCII 代碼48與 integer 進行比較0。
但在任何情況下,for 回圈都是低效的。
最好這樣寫:
for (const char *p = s; *p; p)
{
if ('0' <= *p && *p <= '9') count[*p - '0'];
}
uj5u.com熱心網友回復:
您正在將字符與整數進行比較。現在,char是一個數字型別,所以你可以這樣做,但結果不是你所期望的。字符'0'的ASCII是48,例如。
您可以將0或1或任何其他單個數字轉換為其 ASCII 表示形式,方法是將其添加到'0'.
uj5u.com熱心網友回復:
if (s[j] == i)=> 這里s定義為字符,i定義為整數。因此,要解決此問題,您必須將整數轉換為字符。sprintf() 可以作業或一個簡單的 '0'。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/397586.html
上一篇:我怎樣才能使這個JS函式更短?
