计算一个句子中的字母并为每个字母显示*

时间:2017-10-04 02:40:52

标签: c

我在计算字符串中的字母数量并将其显示在这样的图表中时遇到了麻烦

a: ***  
b: *  
c: **  
etc... 

我有一个代码,显示图表上每个字母中整个字符串的长度。这是我到目前为止所拥有的。

int main(){
    char Str[]="TheQuickBrownFoxJumpedOverTheLazyDog";
    int j, occurrences[26], Letter=97, index=0;
    while(Letter>96, Letter<123){
        printf("%c: ", Letter);
        Letter++;
    for(j=0; j<=occurrences[index]; j++){
        printf("*");
    }
    printf("\n");
    }
}

这是我的输出:

a: *************************************  
b: *************************************  
c: *************************************  
d: *************************************  
e: *************************************  
f: *************************************  
g: *************************************  
h: *************************************  
i: *************************************  
j: *************************************  
k: *************************************  
l: *************************************  
m: *************************************  
n: *************************************  
o: *************************************  
p: *************************************  
q: *************************************  
r: *************************************  
s: *************************************  
t: *************************************  
u: *************************************  
v: *************************************  
w: *************************************  
x: *************************************  
y: *************************************  
z: *************************************  

我该怎么做才能解决这个问题?我很失落,因为我们的导师未能帮助我解决这个问题。我也看了一下网站,可以找到计算字符的代码,但我不知道如何得到它然后打印星号。

2 个答案:

答案 0 :(得分:0)

用遍历字符串的for循环替换while循环,直到结束('\ 0')。

 for (char* ptr = Str; *ptr; ++ptr)

如果需要考虑大小写,则数组必须保留26 * 2个元素。 如果不考虑案例26元素就足够了,您可以忽略下面的else if条件。

将数组初始化为0。

int occurrences[26*2] = {0};

for循环内的字符串中获取索引。

if (*ptr >= 'A' && *ptr <= 'Z') { index = *ptr - 'A'; }
else if (*ptr >= 'a' && *ptr <= 'z') { index = *ptr - 'a' + 26; }

然后在计算的索引处递增occurrences数组。

++occurrences[index];

在打印*时,请记住eventss数组保持字母位置,如此 -

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

答案 1 :(得分:-1)

这是一个例子,它适用于所有ASCII字符。试着弄清楚如何只在你想要的范围内做到这一点。

#include <stdio.h>
#include <string.h>

int main() {
  char* string = "TheQuickBrownFoxJumpedOverTheLazyDog";
  size_t len = strlen(string);
  size_t occurences[128] = {0};
  for (size_t i = 0; i < len; ++i) {
    ++occurences[string[i]];
  }

  for (unsigned char i = 0; i < 128; ++i) {
    printf("%c: ", i);
    for (size_t j = 0; j < occurences[i]; ++j) {
      printf("%c", '*');
    }
    printf("\n");
  }

  return 0;
}