2014-11-11 2 views
0

간단한 문자열을 얻기 위해 긴 문자열을 분할하려고하는 코드를 작성하여 정렬 할 수 있도록했습니다 ... 중첩 루프에서 깨 졌을 때 첫 번째 루프 전적으로??C에서 기호를 사용하여 문자열 나누기

내 입력

내가이 원하는 출력 "$ 나 (이다 노나, & $ (내"입니다 "나의 날이다 NA" 어떻게 내가이

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

int main(){ 
    char splitter[100]; 
    char mystring[1000]; 
    char newstring[1000][1000]; 
    int i,j,z,k=0; 

    scanf("%s", splitter); 
    scanf("%s", mystring); 

    for (i=0; i<1000; i++){ 
     for (j=k; j<1000; j++){ 
      for (z=0; z<100; z++){ 
       if (mystring[j]==splitter[z]){ 
        k++; 
        break; 
       } 
       else 
       { 
        newstring[i][j]=mystring[j]; 
       } 
      } 
      if (mystring[j]==splitter[z]) 
       break; 
     } 
    } 

    for (i=0; i<10; i++){ 
     printf("%s ", newstring[i]); 
    } 

    return 0; 
} 
+1

제대로 코드 들여 쓰기를 바랍니다. – Lundin

+1

'strtok'을 사용하십시오 ... – BLUEPIXY

+0

스택 크기가 1MB 이하인 환경 (예 : WIN32)에서는 실패합니다. –

답변

3
을 ?? 해결할 수

첫째, C는 그냥 블록을 표시하기 위해 들여 쓰기를 사용할 수 없습니다 당신이 즉, {}을 괄호를 사용해야합니다, 파이썬하지 않습니다

둘째, 아니요 break는 가장 가까운 가장 루프의에서 나누기, 더있다. 0 방향으로 두 개 이상의 레벨 중

세 번째로, 문자열을 항상 100 자 길이로 반복하는 것입니다 (예 : 그렇지 않은 경우). 잘못된 것이므로 길이가 얼마나되는지 파악하려면 strlen()을 사용해야합니다.

넷째, 실패 할 수 있으므로 scanf() 호출의 반환 값을 확인해야합니다.

다섯 번째로, newstring은 배열의 배열로, 즉 거대한 1 메가 바이트 2D "정사각형"문자로 선언됩니다.이 문자는 분명히 사용자가 사용하는 방식이 아닙니다.

0

코드에 많은 실수가 있지만 왜 그런 실수를하는지 알 수 없습니다. 예를 들어 왜 두 개의 배열을 스캔하고 왜 2D 배열을 사용하고 있는지 알 수 없습니다. 다른 것 그 scanf doesnt 일이 거기에있을 때 string.According에 공간이있을 때 당신에게 말하고 싶습니다 귀하의 문제는 여기에 아주 간단한 해결책입니다.

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

int main(){ 
char splitter[100]; 
char mystring[1000]; 
char newstring[1000][1000]; 
int i,j,z,k=0; 

gets(splitter); 

for(i=0;i<strlen(splitter);++i){ 
     if(((splitter[i])>=65 &&(splitter[i]<=90)) || ((splitter[i]>=97)&&(splitter[i] <=122))) 
     mystring[k++]=splitter[i]; 
else 
    mystring[k++]=' '; 
} 
printf("%s\n",mystring); 
    //scanf("%s", mystring); 


return 0; 
} 
0

확인 아래 코드 :

int main() 
{ 
    int i=0,j=0,t,f=0; 
    char s[20]; 
    char b[20]; 
    printf("Enter the string\n"); 
    scanf("%s",&s); 
    while(s[i] != '\0') 
    { 
     t = s[i]; 
     if((t>=65 && t<=90) || (t>= 97 && t<=122)) 
     { 
     b[j++] = s[i]; 
     f = 1; 
     } 
     else 
     { 
     if(f) 
     b[j++] = ' '; 
     } 
     i++; 
    } 
    b[j] = '\0'; 
    printf("%s\n",b); 
    return 0; 
} 
1
#include <stdio.h> 
#include <string.h> 

int main(){ 
    char splitter[100]; 
    char mystring[1000]; 
    char *tokens[500]; 
    char *token; 
    int i=0; 

    scanf("%99[^\n]%*c", splitter); 
    scanf("%999[^\n]", mystring); 

    token = strtok(mystring, splitter); 
    while(token){ 
     if(i) 
      putchar(' '); 
     printf("%s", token); 
     tokens[i++] = token; 
     token = strtok(NULL, splitter); 
    } 
    putchar('\n'); 

    return 0; 
}