鍵盤輸入一段字符數,截取陣列從第三個字符開始,截取五個元素,并將截取的子串存放在另一個陣列。
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
char s[MAX],t[MAX];
int length(char s[ ]){
int i;
for (i=0;s[i]!='\0';i++);
return(i);
}
int sub(char s[ ],char t[ ],int start, int len ) {
int n,i;
n=length(s);
if (start <0 || start>=n )
return (0);
if ( len<0 || len+start>n)
return (0);
for (i=0;i<len ;i++)
t[i]=s[start+i];
t[i]='\0';
printf("截取所得字串:");
for (i=0;t[i]!='\0';i++);
printf("%c",t[i]);
return (1);
}
int main(){
int i;
printf("請輸入一段字符:");
for (i=0;s[i]!='\0';i++);
scanf("%c",&s[i]);
sub(s,t,3,5);
return 0;
}
uj5u.com熱心網友回復:
其實,你的代碼在輸入處理時就出現問題了。for (i=0;s[i]!='\0';i++);
這一句就好幾處問題。
1. s這個陣列你如果定義的是全域變數的話,編譯器一般會給初始化為0,即陣列的每個元素都是0。如果定義的是區域變數的話,則不會被初始化,也就是所分配的堆疊空間里的臟資料。關于堆和堆疊的概念,全域和區域的概念,如果不明白的話,可以找找書看看,這些是基礎。
也就是說,你寫的代碼中,i=0時,s[i]就已經是0了('\0'這個字符就是0的意思)
2。 分號(;)不可以亂用,分號表示陳述句結束的意思。
你在for陳述句后面直接寫分號,表示for陳述句執行回圈條件判斷和i++,直到條件結束,不做其他的事情。
這個for結束時,i=0。(你的例子里)
3. 上面的for徹底結束后,才會去執行scanf("%c",&s[i]);而且它是跟你的for陳述句是同一個層次的,因為你把for用分號結束了。
這一句執行后,s陣列的第i=0個元素被設定了一個字符。s陣列其實就是長度為1的字串了。
所以,你想從index=3開始,取得length=5的子串,按照你的代碼處理,自然沒有結果了。
我想,你是想:
1. 先輸入一段字串。這個應該是 scanf("%s", s); %s是表示輸入的是字串
如果使用%c一個字符一個字符的話,就需要結束條件了,比如代碼要變成類似下面這樣:
int i;
char c;
i = 0;
scanf("%c", &c);
while( c != 'e' && i < MAX-1) { /* 輸入字母e就結束。這個字母你隨便指定,但不能是'\0',因為這個需要按組合鍵輸入,系統不同,沒準輸入不了 */
s[i++] = c;
scanf("%c", &c);
}
s[i] = 0; /* 字串末尾加上0 */
2. 剩下就是呼叫你的代碼去處理字串了。
作為學生,練習題怎么寫都可以,在實際的商業開發中,你的這些代碼寫法是完全不可以的。
那么,學生該學什么呢?
其實,就是 “原理”二字,知道每種語言的它的內部處理機制,這也是編譯器的最基本功能。
了解了基本原理之后,再掌握這樣語言的書寫特性,最后,結合不斷的經驗,就能寫出好的代碼了。
現在,語言繁多,每種都有其優缺點,要學會抽取其精髓,就是"原理",然后,就可以快速寫出代碼了。
uj5u.com熱心網友回復:
樓上點評精辟uj5u.com熱心網友回復:
十分感謝,感覺懂了很多
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/80149.html
標籤:C語言
