![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
|
主題工具 | 顯示模式 |
|
|
#3 (permalink) |
|
管理員
![]() ![]() |
您的原始碼,迪西看不太懂,且迪西爛爛的 DEV-C 無法編譯
重新整理排版過您的原始碼之後 ... 語法:
#include <stdio.h>
#include <stdlib.h>
int my_strlen(char *a);
int main(void)
{
char a[100],b[100];
int i,j,l;
printf("\n請輸入字串 :");
gets(a);
l = my_strlen(a); //判斷字串長度
printf("\n字串長=%d\n",l);
i=0;
while (l >= 0)
b[l--] = a[i++];
for (j=0;j<=my_strlen(a);j++)
printf("%c",b[j]);
printf("\n\n");
system("pause");
return 0;
}
int my_strlen(char *a)
{
int i=0;
while (i>=0)
{
if(a[i]=='\0') break;
else i++;
}
i++;
return i;
}
發現幾個怪怪的地方 1. 語法:
i=0;
while (l >= 0)
b[l--] = a[i++];
就是會把 "\0" 給複製到前面去,當用 printf ("%s") 的標準化格 式顯示時,就會顯示不出來 ...,這是很明顯的邏輯錯誤,程式碼 乍看之下是對的但,實際運作是錯得,因此後面不得已只好用字元 列印的方式印出來 語法:
for (j=0;j<=my_strlen(a);j++)
printf("%c",b[j]);
因此正確的作法式,在測量字串的長度時,要把 "\0" 字串結尾要排除 計算 ... 語法:
int my_strlen(char *a)
{
int i=0;
while (i>=0)
{
if(a[i]=='\0') break;
else i++;
}
//i++; 據迪西的推測,這一行是補"\0" 字串結尾,拿掉即可
return i;
}
簡單的說就是,當程式在處理字串的內容時 "\0" 的字串結尾要先排除 最後補在字串的最後面表示字串的結束。 2. Function 的宣告,若是要把 Function 程式碼,放到 main 後面 則一定要這樣宣告,而不是 int my_strlen(); ,連同那個 () 裡面 的也要有 int my_strlen(char *a); ,不然某些編輯器容易出錯... ,正確如下: Function a (XXX); main() { ------ } Function a (XXX) { ------ } 或是 Function a (XXX) { ------ } main() { ------ } 3. 那個抓字串長度的方式,寫得很好,不過依據正確的說法多算了 "/0" 的字元結尾,所以錯了,可以用 strlen 字串長度的量測指令,該指令在 string.h 中,需要 #include <string.h> 第一次修改的如下: 語法:
#include <stdio.h>
#include <stdlib.h>
int my_strlen(char *a);
int main(void)
{
char a[100],b[100];
int i,j,l;
printf("\n請輸入字串 :");
gets(a);
l = my_strlen(a); //判斷字串長度
printf("\n字串長 : %d\n",l);
i=0;
l-=1; //C & C++ 語言的 array 是從 0 開始,如長度 6 則須 -1,因為 0~5
while (l >= 0) //array 的反向複製
b[l--] = a[i++]; //與 b[i++] = a[l--]; 相同
b[i]='\0'; // 補上字串的結尾
//for (j=0;j<=my_strlen(a);j++) 因為修正成標轉化的格式後,可以省略
// printf("%c",b[j]); 因為修正成標轉化的格式後,可以省略
printf("交換前 : %s \n",a);
printf("交換後 : %s \n\n",b);
system("pause");
return 0;
}
int my_strlen(char *a)
{
int i=0;
while (i>=0)
{
if(a[i]=='\0') break;
else i++;
}
//i++; 據迪西的推測,這一行是補"\0" 字串結尾,拿掉即可
return i;
}
第二次使用 strlen 函數式的修改的如下: 語法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char a[100],b[100];
int i,j,l;
printf("\n請輸入字串 :");
gets(a);
l = strlen(a); //判斷字串長度
printf("\n字串長 : %d\n",l);
i=0;
l-=1; //C & C++ 語言的 array 是從 0 開始,如長度 6 則須 -1,因為 0~5
while (l >= 0) //array 的反向複製
b[l--] = a[i++]; //與 b[i++] = a[l--]; 相同
b[i]='\0'; // 補上字串的結尾
printf("交換前 : %s \n",a);
printf("交換後 : %s \n\n",b);
system("pause");
return 0;
}
此帖於 2011-07-24 11:31 AM 被 getter 編輯. |
|
|
送花文章: 37855,
|
|
|
相似的主題
|
||||
| 主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
| 有沒有可以上傳圖片,設計好的網頁? | f6617 | 一般電腦疑難討論區 | 4 | 2004-10-26 10:54 AM |
| 有沒更好的國語英文切換方式? | latenight | 一般電腦疑難討論區 | 0 | 2004-02-23 07:24 PM |
| 有沒有好的php討論區? | turnoff | 一般電腦疑難討論區 | 2 | 2003-08-04 06:22 PM |
| 請問一下HD有沒有比較好的散熱方法~~ | 大米 | 硬體疑難使用問題討論區 | 13 | 2003-04-06 07:20 PM |