您的原始碼,迪西看不太懂,且迪西爛爛的 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++];
這個應該是使用 array 的顛倒複製方式吧 ...,有一個詭異的錯誤
就是會把 "\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;
}