從用戶那里輸入一個字串,并使用空格分隔單詞。
為什么strstr沒有回傳一個合適的位置呢?
char array[1024][1024] 。
char str[100]。
printf( "enter the string")。
fgets(str, 100, stdin) 。
char str2 = ' '/span>;
int i =0;
int k =0;
while( str[i] !=''/span>)
{
int pos = strstr(str, str2)。
if( pos != NULL)
{
for( int m = 0; m<pos; m )
array[k][m] = str[m] 。
pos =0;
i ;
str pos;
}
uj5u.com熱心網友回復:
為什么strstr沒有回傳一個合適的位置?
我認為 "適當的位置 "是指位置,也就是找到子串的索引。
好吧,首先你呼叫的函式不正確。你傳遞了字符 ' ',但是函式期望的是一個像" "的字串。
BUT
即使你呼叫正確,strstr 從未回傳一個位置(又稱索引)。它回傳的是一個指標
所以你不能做這樣的事情:
for( int m = 0; m<pos; m )
在此閱讀更多內容:
https://man7.org/linux/man-pages/man3/strstr.3.html
uj5u.com熱心網友回復:
這將分離單詞并存盤在一個陣列中,使用指標。
。 printwords()
{
char array[1024][1024]。
char str[100];
printf( "輸入字串")。
fgets(str, 100, stdin)。
int i =0;
int k =0;
int r,c =0;
while( str[i] != '' )
{
如果( str[i] != ' ')
{
array[r][c ] = str[i];
i ;
}
否則
{
array[r][c] = ''。
r ;
c=0;
i ;
}
}
for( int m =0; m <= r;m )
printf( "最后%s", array[m])。
}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
"為什么strstr沒有回傳一個合適的位置?"
char *strstr(const char *str1, const char *str2)需要兩個字串引數,并回傳一個指向str2第一次出現的指標。 你的代碼試圖將其回傳值捕獲為一個int,并試圖在引數2中使用一個char。 這應該會導致一個編譯警告。
但是,如果你的目的是根據一個分隔符(如空格字符)(' ')來分割一個字串,有更好的選擇,而不是使用strstr()。 正如評論中提到的("看看strchr甚至strtok...),看看這個替代方法,使用strtok():
char array[1024][1024] = {{0}。 //將二維陣列的所有元素初始化為零。
char inputBuf[80] = {0}; //initialize all array elements to zero.
char *tok = NULL;//initialize pointer to NULL。
char delimiter[] = "
";//set delimiter to contain both space and newline。
int index = 0;
printf("%s", "輸入一個句子并點擊回傳。")。
if(fgets(inputBuf, sizeof inputBuf, stdin)
{
tok = strtok (inputBuf, delimiter);
while(tok)
{
strcpy(array[index], tok)。
tok = strtok(NULL, delimiter);
index ;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332267.html
標籤:
