user-0 提问: C语言建立串，计算出字符的出现次数

回复:
user: user-1
content: #include <string.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h>  #define MaxSize 32 //定义串 typedef struct {     char data[MaxSize];     int length;        //存放串长 }SqString;  //存放输出结果 typedef struct {     char ch;//单字母     int count;//计数器 }Cch;  SqString s; char cstr[MaxSize];  //创建串 //void CreateStr(SqString &str,char cstr[]) void CreateStr(SqString *str,char cstr[]) {     int i;     for(i=0;cstr[i]!='\0';i++)     {         str->data[i]=cstr[i];     }     str->length=i;     //printf("%d \n",i); } /* //输出串 void OutputStr(SqString s) { int i; if(s.length>0) { for (i=0;i<s.length;i++) { printf(" %c",s.data[i]); } printf("\n"); } } */  //存放到Cch中 void SaveCch() {     //Cch c[MaxSize];     Cch c[52];     int idx;     memset(c, 0, sizeof(c));     //OutputStr(s);     CreateStr(&s,cstr);     //if(s.data>0)     if(s.length > 0)    //应该用长度吧     {         for(int i=0;i<s.length;i++)         {             if (isupper(s.data[i])) {                 idx = s.data[i] - 'A';                 c[idx].count++;             }             if (islower(s.data[i])) {                 idx = s.data[i] - 'a';                 c[idx+26].count++;             } #if 0             c[i].ch = s.data[i];             c[i].count=0;             for(int j=0;j<s.length;j++)             {                 if(c[i].ch==s.data[j])                 {                     c[i].count++;                 }             }             printf("%c: %d\n",c[i].ch,c[i].count); #endif         }         for (int i = 0; i < 52; i++) {             if (i < 26 && c[i].count > 0)                 printf("%c: %d\n", 'A'+i, c[i].count);             if (i >= 26 && c[i].count > 0)                 printf("%c: %d\n", 'a'+i-26, c[i].count);          }      } }  int main() {      printf("建立串s: ");     fgets(cstr, MaxSize, stdin);     //CreateStr(s,cstr);     //OutputStr(s);     SaveCch();     return 0; } 用这个版本测试一下编译，是否还会有error~

user: user-0
content: 引用 2 楼 自信男孩 的回复：#include <string.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h>  #define MaxSize 32 //定义串 typedef struct {     char data[MaxSize];     int length;        //存放串长 }SqString;  //存放输出结果 typedef struct {     char ch;//单字母     int count;//计数器 }Cch;  SqString s; char cstr[MaxSize];  //创建串 void CreateStr(SqString &str,char cstr[]) {     int i;     for(i=0;cstr[i]!='\0';i++)     {         str.data[i]=cstr[i];     }     str.length=i;     //printf("%d \n",i); } /* //输出串 void OutputStr(SqString s) { int i; if(s.length>0) { for (i=0;i<s.length;i++) { printf(" %c",s.data[i]); } printf("\n"); } } */  //存放到Cch中 void SaveCch() {     //Cch c[MaxSize];     Cch c[52];     int idx;     memset(c, 0, sizeof(c));     //OutputStr(s);     CreateStr(s,cstr);     //if(s.data>0)     if(s.length > 0)    //应该用长度吧     {         for(int i=0;i<s.length;i++)         {             if (isupper(s.data[i])) {                 idx = s.data[i] - 'A';                 c[idx].count++;             }             if (islower(s.data[i])) {                 idx = s.data[i] - 'a';                 c[idx+26].count++;             } #if 0             c[i].ch = s.data[i];             c[i].count=0;             for(int j=0;j<s.length;j++)             {                 if(c[i].ch==s.data[j])                 {                     c[i].count++;                 }             }             printf("%c: %d\n",c[i].ch,c[i].count); #endif         }         for (int i = 0; i < 52; i++) {             if (i < 26 && c[i].count > 0)                 printf("%c: %d\n", 'A'+i, c[i].count);             if (i >= 26 && c[i].count > 0)                 printf("%c: %d\n", 'a'+i-26, c[i].count);          }      } }  int main() {      printf("建立串s: ");     fgets(cstr, MaxSize, stdin);     //CreateStr(s,cstr);     //OutputStr(s);     SaveCch();     return 0; } 供参考～ 楼主的问题主要是C++支持参数带&，而C 不支持参数&谢谢   你这么一处理我得好好琢磨一下了

user: user-1
content: #include <string.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h>  #define MaxSize 32 //定义串 typedef struct {     char data[MaxSize];     int length;        //存放串长 }SqString;  //存放输出结果 typedef struct {     char ch;//单字母     int count;//计数器 }Cch;  SqString s; char cstr[MaxSize];  //创建串 void CreateStr(SqString &str,char cstr[]) {     int i;     for(i=0;cstr[i]!='\0';i++)     {         str.data[i]=cstr[i];     }     str.length=i;     //printf("%d \n",i); } /* //输出串 void OutputStr(SqString s) { int i; if(s.length>0) { for (i=0;i<s.length;i++) { printf(" %c",s.data[i]); } printf("\n"); } } */  //存放到Cch中 void SaveCch() {     //Cch c[MaxSize];     Cch c[52];     int idx;     memset(c, 0, sizeof(c));     //OutputStr(s);     CreateStr(s,cstr);     //if(s.data>0)     if(s.length > 0)    //应该用长度吧     {         for(int i=0;i<s.length;i++)         {             if (isupper(s.data[i])) {                 idx = s.data[i] - 'A';                 c[idx].count++;             }             if (islower(s.data[i])) {                 idx = s.data[i] - 'a';                 c[idx+26].count++;             } #if 0             c[i].ch = s.data[i];             c[i].count=0;             for(int j=0;j<s.length;j++)             {                 if(c[i].ch==s.data[j])                 {                     c[i].count++;                 }             }             printf("%c: %d\n",c[i].ch,c[i].count); #endif         }         for (int i = 0; i < 52; i++) {             if (i < 26 && c[i].count > 0)                 printf("%c: %d\n", 'A'+i, c[i].count);             if (i >= 26 && c[i].count > 0)                 printf("%c: %d\n", 'a'+i-26, c[i].count);          }      } }  int main() {      printf("建立串s: ");     fgets(cstr, MaxSize, stdin);     //CreateStr(s,cstr);     //OutputStr(s);     SaveCch();     return 0; } 供参考～ 楼主的问题主要是C++支持参数带&，而C 不支持参数&

user: user-2
content: 虽然不是很懂为啥这样写，不过好像没啥问题，除了void CreateStr(SqString &str,char cstr[])跟你的传参