大佬們,幫忙看看我的代碼。在不同的編譯器上結果不同。本人編輯器是VC++,代碼成功運行。換成別的編譯器就會報錯了


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 11
//定義串
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];
//OutputStr(s);
CreateStr(s,cstr);
if(s.data>0)
{
for(int i=0;i<s.length;i++)
{
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);
}
}
}
int main()
{
printf("建立串s: ");
gets(cstr);
CreateStr(s,cstr);
//OutputStr(s);
SaveCch();
return 0;
}
uj5u.com熱心網友回復:
雖然不是很懂為啥這樣寫,不過好像沒啥問題,除了void CreateStr(SqString &str,char cstr[])跟你的傳參uj5u.com熱心網友回復:
#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 不支持引數&
uj5u.com熱心網友回復:
謝謝 你這么一處理我得好好琢磨一下了
uj5u.com熱心網友回復:
#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~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72860.html
標籤:C語言
