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

String 如何写出字符串中的大写字母?,string,visual-studio-2012,uppercase,words,sentence,String,Visual Studio 2012,Uppercase,Words,Sentence,我正在使用VisualStudio2012 我需要写一个句子,然后检查这个句子中有多少单词以大写字母开头a,G,Z,U…-好的,我写了,现在我需要写出以大写字母开头的单词 例如:你好,请帮我回答这个问题,我需要我的程序说: 5个单词以大写字母开头,这些单词是:嗨,请帮助回答问题 下面是我所做的,计算以大写字母开头的单词: #include<stdio.h> #include<string.h> #define lenght 20 int main(){ char sent

我正在使用VisualStudio2012

我需要写一个句子,然后检查这个句子中有多少单词以大写字母开头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做了一些尝试,但也没有效果。 请帮忙!
谢谢你的帮助

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

你可能要做的第一件事是定义一个单词的开头。只有这样你才能知道它是否大写

例如,我当时的天真想法是,一个单词的第一个字母要么在文本的开头,要么紧跟在某些描述的空格后面,换行符、空格、制表符等等

如果是这样的话,那么只需计算您看到其中一个空格字符后跟大写字母的次数。这种野兽的伪代码类似于:

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
现在可能是因为我使用的定义太简单了,比如这个句子,因为我没有考虑开始括号是空白

但是你必须找到一个平衡点,这样你就不会像这句话中那样出现误报,你和RE可能被认为是不同的词

也许一个可行的方法是列出一个有效的单词列表,你可以对照它进行检查,例如,一个完整的字典,适当的小写。然后,对于文本中的每个位置,再次获取最大数量的字符,小写以检查是否构成有效单词,并检查其中的第一个字符,然后再向前推进那么多字符


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

看起来你使用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]);

... 以大写字母a、G、Z、U开头大写字母的例子?认真地这里任何不知道大写字母是什么的人请举手:-我知道如何检查它是否是字母,但我不知道如何检查它是否不是字母。我从:if句子!=。。。但是我不知道如何继续。如果你可以用两种方法来做:一种是使用!,所以如果!句子[i]>='A'和句子[i]'Z'