2015-01-07 4 views
0

임 비주얼 스튜디오 2012문자열에 대문자를 쓰는 방법은 무엇입니까?

나는 문장으로 작성하고 다음 대문자로 시작 얼마나 많은 단어를 문장에서 확인해야

를 사용하여 (A, G, Z, U ...) - "5 단어 : 내가 말하고 내 프로그램이 필요합니다"안녕하세요이 질문 제발 도와주세요 "확인 지금 내가 예를 들어 대문자

로 시작하는 단어를 쓸 필요가 있다고했다 대문자로 시작하고 그 단어는 다음과 같습니다. 안녕하세요 도와주세요. 질문 : "

여기

내가 (대문자로 시작하는 단어 계산) 이미 한 일이다

#include<stdio.h> 
#include<string.h> 
#define lenght 20 
int main(){ 
char sentence[lenght]; 
int i,n=0,num; 
printf("\nWrite a sentence: "); 
gets(sentence); 
if(sentence[0]>='A' && sentence[0]<='Z'){ 
      n++; 
     } 
num=strlen(sentence); 
for(i=0;i<num;i++){ 
    if(!(sentence[i]>='A' && sentence[i]<='Z' || sentence[i]>='a' && sentence[i]<='z')){ 
     if(sentence[i+1]>='A' && sentence[i+1]<='Z'){ 
     n++; 
     }}} 
printf("\nNum of words that start with uppercase letter is:%d \n",n); 
return 0; 
} 

이 작품을하지만 대문자로 시작하는 단어를 작성하는 방법을 몰라, 내가 뭔가를 시도 strcpy하지만 그 didnt 작업, 나는 또한 그냥 printf와 함께 일을 시도했지만 그 didnt 작업 중 하나. 도움말 pls! P.S 모든 도움에 감사드립니다!

+0

"... 대문자 (A, G, Z, U ...)로 시작"- 대문자 예? 진심으로? 여기 누가 대문자인지 알 수없는 사람을 만날 수 있습니다 :-) – paxdiablo

답변

0

문자가 포함 된 문자 위치는 이전의 문자 위치를보고 단어의 시작인지 확인할 수 있습니다. 그 문자가 이라면 문자입니다. 그러면 단어가 시작되지 않습니다.

+0

나는 편지인지 확인하는 방법을 알고 있지만, 편지가 아닌지 확인하는 방법을 안다. 나는 다음과 같이 시작했다 : if (문장! =) ...하지만 나는 계속하는 법을 몰랐다. – PeroFromBotinec

+0

if (문장 [i]> = 'A'&& 문장 [i] <= 'Z'|| 문장 [i]> = 'a'&& 문장 [i] <= 'z') - 문자가 문자 인 경우. – PeroFromBotinec

+0

두 가지 방법이 있습니다 : 하나는'!'를 사용하는 것이므로'if (! (sentence [i]> = 'A'&& 문장 [i] <= 'Z'))'}, 다른 하나는 되돌릴 것입니다 [De Morgan의 법칙] (https://en.wikipedia.org/wiki/De_Morgan%27s_laws)을 사용한 전체 테스트 : if (문장 [i] < 'A'|| 문장 [i]> 'Z')' –

0

가장 먼저해야 할 일은 단어의 시작 부분을 정의하는 것입니다. 그래야만 대문자인지 알 수 있습니다.

예를 들어, 즉각적인 (순진한) 생각은 단어의 첫 글자가 텍스트의 시작 부분에 있거나 일부 설명 (줄 바꿈, 공백, 탭 등)의 일부 공백 바로 뒤에 오는 것입니다. .

그런 경우 공백 문자 중 하나와 대문자가 몇 번 이어지는지를 세는 것이 중요합니다. 뭔가처럼 같은 짐승에 대한 의사 코드는 다음과 같습니다가있을 수 있습니다 이제

def countUppercasedWords (sentence): 
    count = 0 
    for i = 0 to sentence.lastCharIndex - 1: 
     if sentence[i] in '<whitespace>' and sentence[i+1] in 'A..Z': 
      count = count + 1 
    return count 

이 나는 ​​오프닝 고려하지 않은 이후 (예 : 바로이 문장 AS)도 단순한에서 사용했던 정의 괄호는 공백이됩니다.

하지만이 문장에서와 같은 가양 성을 포착하지 않도록 균형을 잡아야합니다. YOURE은 별도의 단어로 간주 될 수 있습니다.

아마도 유효한 방법은 확인할 수있는 유효 단어 목록 (예 : 전체 사전, 적절히 소문자)을 사용하는 것입니다. 그런 다음 텍스트의 모든 위치에 대해 유효 문자를 만드는 최대 문자 수 (다시 확인을 위해 소문자로 표시)를 가져 와서 해당 문자의 첫 번째 문자를 확인한 다음 해당 문자를 전진시킵니다.

현재 위치에서 유효한 단어가 인 경우 다음 문자로 진행하고 계속 시도하십시오.

0

C++가 아닌 C를 사용하는 것 같습니다. 맞습니까?

이 단어를 모두 저장하려면 공간이 필요합니다.동적으로 할당되거나 충분히 큰 문자열 배열을 사용해야합니다. 두 번째 방법은 더 간단하므로 사용하겠습니다.

#define MAX_SENTENCE_LENGTH 1024 
#define MAX_WORD_LENGTH 64 
#define MAX_WORDS 32 

. . . 

char sentence[MAX_SENTENCE_LENGTH]; 
char words[MAX_WORDS][MAX_WORD_LENGTH]; 
int word_count; 
char* current_char; 
size_t word_length; 

gets(sentence); 
current_char = sentence; 
while(1) { 
    /* Skip white spaces */ 
    while(*current_char != '\0' && isspace(*current_char)) 
     current_char++; 

    if(*current_char == '\0') 
     break; 

    if(isupper(*current_char)) { 
     /* Store word in the array and increment word's count. 
     word_length = 0; 

     while(current_char[word_length] != '\0' && !isspace(current_char[word_length])) { 
      words[word_count][word_length] = current_char[word_length]; 
      word_length++; 
     } 

     word[word_count][word_length] = '\0'; 
     word_count++; 
    } 
    else { 
     /* Skip word without first upper letter */ 
     while(*current_char != '\0' && !isspace(*current_char)) 
      current_char++; 
    } 
} 
. . . 
printf("%d words are found and these words are:\n", word_count); 
for(int i = 0; i < word_count; i++) 
    printf("%s\n", words[i]); 
관련 문제