Logic 如何计算qbasic或c语言中每个单词字母的频率?

Logic 如何计算qbasic或c语言中每个单词字母的频率?,logic,qbasic,Logic,Qbasic,已成功计数每个字母,但字母顺序无法按word中的顺序显示。 例如,输入单词bbinod 输出=b2i1n1o2d1 这里是我的qbasic程序: INPUT "Enter the string:", A$ n = LEN(A$) FOR i = 97 TO 122 FOR j = 1 TO n IF CHR$(i) = MID$(A$, j, 1) THEN count = count + 1 END IF NEXT

已成功计数每个字母,但字母顺序无法按word中的顺序显示。 例如,输入单词bbinod 输出=b2i1n1o2d1

这里是我的qbasic程序:

INPUT "Enter the string:", A$
n = LEN(A$)

FOR i = 97 TO 122

    FOR j = 1 TO n
        IF CHR$(i) = MID$(A$, j, 1) THEN
            count = count + 1
        END IF
    NEXT
    FOR j = 1 TO n
        IF (MID$(A$, j, 1) = CHR$(i)) THEN
            PRINT CHR$(i), count
            j = n
        END IF

    NEXT

    count = 0
NEXT
建议2个数组,每个数组26个(如果只考虑字母)

size_t counts[26] = {0};
然后是第二个数组`

char order[26] = {'\0'};
然后输入字符串中的每个字母

if( isalpha( str[i]) ) 
{ 
    letter = tolower( str[i];
    counts[ letter - 'a' ]++; 
然后循环执行
顺序
如果匹配项找到了“不做任何事情”,否则将“\0”替换为字母

打印将在订单[]中循环,直到遇到“\0”或检查所有元素

每次订购时[]!='\0':

putc( order[ element ]);
printf( "%d", counts[ element-'\a' ] );

有两种方法可以回答这个问题

第一种是一种简单的游程编码方案,其中输入
cabc
会产生
c1a1c1
。这样做的好处是,您通常可以在启动时以相当低的内存需求立即输出内容:

input-string := Get-Input

(* nil is the representation of no characters here. *)
last-char := nil
count := 0

For Each (char c) In input-string
    If c = last-char Then
        count := count + 1
    Else
        If last-char = nil Then
            count := 1
            last-char := c
        Else
            Display last-char, count
            count := 1
            last-char := c
        End If
    End If
Loop
If count != 0 Then
    Display last-char, count
End If
我构思的另一个解决方案将保留顺序并确定字符串中所有唯一字母的计数,从而为
cabc
的输入生成
c2a1b1
。此解决方案有点复杂,需要更多内存,通常需要更多执行时间,但由于缺少重复字母,因此输出更紧凑:

input-string := Get-Input

(* 26 is the number of letters a-z. *)
counts := Create-Array 26
order-string := ""

For Each (char c) In input-string
    i := Locate-Char order-string, c
    If i = 0 Then
        order-string := order-string + c
        counts [Length order-string] := 1
    Else
        counts [i] := counts [i] + 1
    End If
Loop

For i := 1 To (Length order-string)
    Display (Char-At order-string, i), counts [i]
Loop

第一个转换为QBASIC应该很简单,但是您可能需要使用帮助文件来了解
DIM
关键字以及如何使用它创建数组。该算法假设数组从1开始,而不是从0开始。

好的,这里的代码应该在Qbasic中工作

DEFINT A-Z
DIM char(1 TO 255) AS STRING * 1
DIM outp(1 TO 255) AS STRING
INPUT "Type your string: ", inp$

'**** Comment out the following line if you want upper and lower cases
'**** treated separately:
inp$ = LCASE$(inp$)

FOR i = 1 TO LEN(inp$)
  char(i) = MID$(inp$, i, 1)
NEXT i

l = 0
FOR i = 1 TO LEN(inp$)
  k = 1
  FOR j = 1 TO i - 1
    IF char(j) = char(i) THEN GOTO skplet
  NEXT j
  l = l + 1
  FOR j = i + 1 TO LEN(inp$)
    IF char(j) = char(i) THEN k = k + 1
  NEXT j
  outp(l) = char(i) + LTRIM$(STR$(k))
skplet:
NEXT i

FOR i = 1 TO l
  PRINT outp(i);
NEXT i

请注意,如注释中所述,大写和小写将被视为与此答案相同的字母。如果希望单独处理它们,只需删除或注释掉
inp$=LCASE$(inp$)
行即可。希望这有帮助

你能改写你的问题吗?理解起来相当混乱。问题很容易理解-输入:bbinnod然后输出的格式应为:b2i1n2o1@BinodThakur,你不能告诉别人你的问题容易理解。如果有人要你更好地解释你的问题,就直说吧。对不起,伙计们,我承认我错了。那么,什么问题是计算单词的每个字母的频率,字母顺序应该在同一个单词字母中。例如,如果输入单词是bbinnod,那么输出应该是b2i1n2o1d1。对不起,我不明白-我的问题是,如果输入是:bbinnod,那么输出应该是:b2i1n2o1d1。@BinodThakur,我不会为您编写代码。不过,我确实安排了所有步骤和一些代码片段。@BinodThakur如果我的答案对您有帮助,请随意投票和/或接受它。祝你将来好运:)