如何写出字符串中的大写字母?

时间:2015-01-07 00:19:57

标签: string visual-studio-2012 uppercase words sentence

我正在使用Visual Studio 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,但是没有用,我也尝试用printf这样做,但也没有用。 请帮忙! P.S感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

对于包含字母的任何字符位置,您可以通过查看上一个字符位置来检查这是否是单词的开头。如果也是一封信,那么你就不是一个单词的开头了。

答案 1 :(得分: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

现在可能是我过于简单化的定义(因为我非常有句),因为我还没有把左括号视为空白。

但是你必须取得平衡,以便你不会在这句话中发现误报,其中YOURE可能会被视为单独的单词。

也许一种可行的方法可能是拥有一个可以检查的有效单词列表(即一个完整的词典,适当地小写)。然后,对于文本中的每个位置,抓取形成有效单词的最大字符数(同样,小写以进行检查)并检查其中的第一个字符,然后再推进那么多字符。

如果你不能在当前位置看到一个有效的单词,只需前进到下一个字符并继续尝试。

答案 2 :(得分: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]);