2017-11-26 6 views
1

하나의 단어로 문자열의 별도의 배열 그것.C : 나는 문장으로 가득 배열 내 배열이</p> <pre><code>char *arraystr[size]; </code></pre> <p>같은 선언 한 그리고 다른 문장 채우기로 문자열을 분리하는 strtok에 의해 가득

arraystr[0]="In which class are you studying"; 

arraystr[1]="I am in Eighth Standard"; 

나는 문장을 단어 단위로 분리하여 배열이나 행렬에 저장하려고합니다. 같은 : 내가 그것을했을하지만 THRE는 분리해서 더 아무것도 없을 때 메신저 충돌로 실행

single_words[0]="In" 

single_words[1]="wich" 

single_words[2]="class" 

//... 

, 나는 그만 때 알고 나던 것 같아요.

내 코드 :

void str_array_line(char str[],int *size,char* arraystr[]) 
{ 
    char *token = strtok(str, "?.!\n"); 
    int i=0; 
    while(token!=NULL) 
    { 
     arraystr[i] = malloc(strlen(token) + 1); 
     strcpy(arraystr[i], token); 
     //printf("Array[%d][%s]\n",i, arraystr[i]); 
     token = strtok(NULL, "?.!\n"); 
     i++; 
     *size=i; 
    } 
} 
void array_single_words(char *arraystr[],char* single_words[]) 
{ 
    int i=0,j=0; 
    for(j=0;j<strlen(arraystr[j]);j++) 
    { 
     char *token = strtok(arraystr[j], " \t"); 
     while(token!=NULL) 
     { 
      single_words[i] = malloc(strlen(token) + 1);; 
      strcpy(single_words[i], token); 
      printf("Array[%d][%s]\n",i, single_words[i]); 
      token = strtok(NULL, " \t"); 
      i++; 
     } 
    } 
} 

int main() 
{ 
    char str[]="In which class are you studying?Sandhiya : I am in Eighth Standard. What about you?Saniya : I am in Ninth Standard\nSandhiya : Do you come to school by bus?\nSaniya : Yes. I travel by bus. I have to catch Route No 24 bus.\nSandhiya : It has passed on just 15 minutes before."; 
    int size=sizeof(str); 
    int i=0; 
    char *arraystr[size]; 
    str_array_line(str,&size,arraystr); 
    printf("Size: %d\n",size); 
    char *single_words[255]; 
    array_single_words(arraystr,single_words); 
} 
+2

'strtok'을 사용하여 텍스트를 문장으로 분리하는 것처럼 문장을 단어로 분리 할 수 ​​있습니다. 나는 여기에있는 사람들이 당신을 위해 숙제를 풀지 않을 것이므로 당신이 시도해보고 어떤 문제에 관해서 특정한 질문을 할 것을 제안합니다. – interjay

+0

안녕하세요. SO! 그래서 당신이 시도한 것을 보여 주시고, 각 결과에 대한 결과는 무엇입니까? – Mzf

+0

코드를 추가했습니다. – markids

답변

0

나는 당신의 코드로 문제의 몇 가지를 참조하십시오. array_single_words에서 모든 문장을 반복합니다. 따라서 j 루프는 arraystr[] 배열에있는 문장 수 이상을 실행해야합니다. str_array_line의 이전 실행에 당신이 배열의 요소 수에 size를 설정하기 때문에 대신

for(j=0;j<strlen(arraystr[j]);j++) 

당신은 빠른 수정을 위해

for(j=0;j<size;j++) 

를 작성해야합니다.

말했다되고 그건의 arraystr 배열의 첫 번째 malloc 크기 size, 당신은 다른 것을 의미하는 같은 변수를 다시 사용하는 방법을 안 것은 의문의 여지가 자신을 혼동 할 것이다. 또한 배열 매개 변수를 함수 매개 변수의 부작용으로 반환하지 않는 것이 좋습니다.

+0

나는 문장의 전체 배열을 main에서 인쇄 할 수 있도록 배열의 원소의 수를 반환했습니다. 고맙다, 당신은 충돌하는 문제를 멈췄다. – markids