2012-02-21 3 views
1

문자 배열에서 문자열을 찾고 출력 문자열 번호와 길이뿐만 아니라 임의로 문자열을 출력하는 프로그램을 작성하려고합니다. 내가 가지고있는 것 같은 문제는 길이를 고르는 것입니다. 나는 주석에 저장된 길이를 사용해야하는지 (심지어 그렇게 할 수 있다면) 또는 각 문자를 세고 길이를 그렇게 출력해야하는지 잘 모르겠다. 나는 그것을 어떻게하는지 정말로 모른다.문자 배열의 한 줄에있는 문자 수 계산

char * strings [] ={ 

// String 1 of 5000: Length = 185 
"J1{GW3_%-3s_%p*E<ed<qLB#YHN%S8.odr5|[QPz&Hslk#3vi[)T3wgh3lHdVtTGz|M1RsGy_r=J]Rgp`0+s)pbvpm<u'8NsPX:Uk)kU,[email protected][{2efjt*z_`eOqa#iP3z)T<(eYWb%W{5g?ynp*<jfEeLUA5:ukgvw$Le,Yjv*o{a/,tV#dG1|+D", 

// String 2 of 5000: Length = 9 
"^PuU]gjh)", 

} 

는 지금은 너무

outfile1 << strings[rand()%5000] << endl; 

이 기능은 루프 내에 중첩되고 그것을 무작위로 출력하는 것처럼 출력 파일로 출력 5,000 문자열을 랜드 기능을 사용하고 있지만, 그건 매번 같은 랜덤 패턴을 사용하기 때문에 RAND 함수를 다르게 배치해야합니다.

어쨌든 출력 파일에 각 문자열의 길이를 표시 할 때 정말 실종 상태입니다. 누구든지이 일을 어떻게 할 수 있는지에 대한 제안이 있습니까? 이것은 숙제이므로 직접 적용하는 대신 적용하는 방법에 대한 정보를 원합니다. :)

지금 현재 내 출력은 이것이다 :

#11 (Length:168) - JZn'TGF&#K=EohoZT 
#12 (Length:189) - DiF9ao^T,7rtQ#Yc>n{_YIG_y 
#13 (Length:50) - y,|l2;hA;H;pHz?|jLADh 

당신이 볼 수 있듯이, 문자열 출력 올바르게하지만 길이가 올바르지 않습니다.

+0

왜 문자열을 추출하고'string :: size()'또는 간단한'strlen()'을 사용할 수 없습니까? – iammilind

+0

나는 그것들을 지금보고 있고 그것을 여기에 적용하는 방법을 찾으려하고있다. :) – Hydlide

+0

숙제 질문의 정확한 표현을 알려 주실 수 있습니까? –

답변

0

/// 업데이트 대답 //

나는 각 배열의 문자열과 그 길이 바로 각을 계산이 출력 싶은 생각 ??? 나는이 빠른 프로그램을 썼다.

char* strings[] = {"hellothisistom", "nicetomeetyou"}; 

for (int i = 0; i<2; i++) 
{ 
    int k = rand()%2; 
    cout<< strings[k] << endl; 
    cout<< strlen(strings[k])<<endl; 

} 

출력 파일 문자열을 cout으로 바꿀 수 있습니다. 문자열과 길이를 모두 얻으려면 동일한 k을 사용해야합니다!

///////////////////////////////////////////////////////////////////////////// //

문자는 문자열 단순히 문자의 배열 등 'A', 'B', '%'로 1 비트의 문자이다. 한편 문자열은 일련의 문자를 나타내는 특수 클래스입니다.

문자 문자열은 일반 배열처럼 작동합니다. 귀하의 경우에는 strings (문자 배열)입니다. sizeof(strings)/sizeof(strings[0])을 사용하여 문자 수를 확인할 수 있습니다.

앞에서 언급했듯이 해당 문자열은 여러 개의 짧은 문자열로 구성됩니다. 단어를 구분하는 특수 문자가없는 한 문자 문자열을 단어로 분리하는 방법은 없습니다 (적어도 쉬운 방법은 아닙니다).

예를 들어 문자열이 hellothisistom 인 경우 단어를 분리 할 수있는 방법이 없습니다 ... 자연어 처리를하지 않으면. 문자열이 hello/this/is/tom 인 경우 개별 단어를 구분하는 것이 있습니다. 그런 다음 여러 가지 방법으로 단어를 추출 할 수 있습니다. 아래 사이트에서 사용할 수있는 도구를 확인할 수 있습니다. http://www.cplusplus.com/reference/clibrary/cstring/

예를 들어, 루프에서 특수 문자의 첫 번째 항목을 검색하고 그 다음에 나오는 특수 문자를 검색 할 수 있습니다. 그 다음에 그 사이에 문자를 복사하고 그 문자와 크기를 출력합니다 (위에서 언급 한 방법을 사용). 그런 다음 다음 단계로 넘어갑니다.

stings[rand()%5000]을 출력 할 때 strings 안에 임의의 문자가 많이 포함되지 않습니까?

+0

내 출력 파일은 따옴표없이 임의의 순서로 "문자열"을 나열하고 물론 주석을 건너 뜁니다. 그 부분은 잘 작동합니다.나는 이미 sizeof를 해왔고 어레이 자체가 5000 라인으로 구성되었음을 보여줍니다. 사실 저는 실험하고 사용했습니다. "\t \t \t \t outfile1 << strlen (strings [rand() % 5000])" 그리고 그것은 길이를 보여주는 관점에서하고 싶었던 일을 끝냈습니다. 그러나 그것은 임의적이었고 제가 요청한 길이를 보여주지 않았습니다 (예를 들어, 30 문자의 문자열은 57로 나타냅니다). 왜냐하면 랜드 기능,하지만 내가 가까이지고 있다고 생각해! – Hydlide

+0

나는 당신이하고 싶은 것을 실제로하고 있다고 생각하지 않습니다. 어떻게 문자열을 시작 했습니까 ?? 당신이 게시 한 것에 따르면,'char * strings [] = {....}'는 작동하지 않을 것입니다! 이러한 문자를 출력하려고하면 아직 할당되지 않은 메모리 공간이므로 임의의 값 (작성한 값이 아닌)이됩니다. 문자 배열을 올바르게 인스턴스화하는 방법은이 사이트를 확인하십시오. http://www.cplusplus.com/doc/tutorial/ntcs/ 먼저 짧은 문자열 배열로 실험 해 보시고 먼저 무엇이 들어 있는지 아시겠습니까? – tuzzer

+0

제 설명으로 당신을 오도 할 수 있다고 생각합니다. 다시 확인해보십시오, 어쩌면 더 이해할 수 있을지도 모릅니다. 내 코드에는 5,000 라인이 있으며 모두 rand 함수로 완벽하게 출력됩니다. 방법? 나는 모르지만 많은 테스트를 거친 후에 실제로 작동합니다. 나는 분명히 좋지 않은 조각으로 배우고있는 것처럼 느껴진다. 그러나 나는 배우고있다. – Hydlide

0

궁극적으로 해결할 수있는 문제는 무엇입니까? 데이터를 구문 분석하려고합니까?

'문자 배열에서 문자열을 찾아 무작위로 출력합니다'라는 것을 이해하지 못합니다. '; char 배열은 거대한 문자열로 인식 될 수 있으므로 특별한 구분 기호를 찾고 유효한 모든 일치 목록을 반환하겠습니까?

그렇다면 소스에서 유효 문자열과 무작위 항목의 차이를 어떻게 알 수 있습니까? 그것은 구분되어야 하는가?

어떻게 임의로 문자열을 출력 할 수 있습니까?

해결하려는 항목과 작업중인 데이터에 대한 세부 정보를 추가하십시오. STR이 문자열 변수가 출력 스트링의 길이

+0

예, "문자열"이라고 말하면이 데이터는 문자 배열에 있으므로 위의 그림과 같이 임의의 문자열을 의미합니다. string :: size() 또는 다른 변형을 사용하면 문자 배열을 사용할 때 작동하지 않을지 모르겠다. 그래서 여러분이 말한 것과 같은 구분 기호를 사용하면 이후에 더 많이 만들 수있다. 내 프로그램은 따옴표 사이의 문자를 계산하여 각 출력에 대해 출력해야합니다. 그 특별한 부분은 제가 가장 문제가되는 부분입니다. – Hydlide

0
  1. 부터 srand (시간 (0));

표준 방법은 괜찮은 의사 난수를 생성합니다. 'srand'는 함수에 전달 된 숫자를 기준으로 시드를 지정하고 'time (0)'은 매초마다 다른 숫자를 반환하므로 '동일한 패턴'문제가 해결됩니다.

  1. a) 귀하는 strlen

    나 사용할 수 있습니다) 또는 당신은 단순히 0 (0 각 문자 확인 문자열을 통해 이동하는 기능을 쓸 수 있습니다 - 현재를 반환 해, 행의 끝을)과 반복 값.

+0

나는 시딩과 함께 놀 것이다. 나는 전에 그것을했지만 잠시 동안하지 못했습니다. 감사. :) – Hydlide

+0

네, 훌륭했습니다. 고맙습니다. 아직도 나의 다른 문제에 맞붙고있다. 그러나 나는 거기에 가고있다! – Hydlide

+0

당신은 환영합니다 :) –