如何获得Word的第一个元素,并将其转换为大写字母,并将所有其他元素转换为小写字母?

我编写了一个Programm,可以将数组中的每个Word反向,但是我的问题是我想将单词的第一个字母大写,将所有其他字母都小写。

C

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

char * reversePrint( char *name )
{
    char *input_string = name;
    char temp;

    while (*input_string)
    {
        char *t = input_string;
        /* End of non Whitespace sequence */
        while (*t && *t == (unsigned char)*t && !isspace(*t))
        {
            t++;
        }
        if (t - input_string > 1)
        {
             /* Non whitespace Sequence  >1*/
            char *e = t;

            /* Reverse Words */
            do
            {
char temp = *input_string;

                *input_string++ = *--e;
                *e = temp;
            } 
        while (input_string < e);

//Paste reversed Sequence
            input_string = t;
        }
        else
        {
            //Non whitepace skip
            input_string++;
        }
    }

    return name;
}

int main( void ) 
{
    char s[] = "I love Pizza";

    printf("%s",reversePrint(s));

    return 0;
}

所以我的问题是我得到了Evol azziP结果,但是我必须拥有evol Azzip

有人可以帮我吗?

stu5229 回答:如何获得Word的第一个元素,并将其转换为大写字母,并将所有其他元素转换为小写字母?

您可以使用类似以下的内容:

  • 将单词的所有首字母大写。
  • 使所有其他字母都变为小写

我使代码变得冗长,因此您可以更轻松地了解发生了什么。可以将其重构为更紧凑的代码。

    void make_upper(char* line)
    {
        bool first = true;
        while(*line)
        {
            if(*line != ' ' && !first)
            {
                *line = tolower(*line);
            }
            //non first char of a word
            if(*line != ' ' && first)
            {
                *line = toupper(*line);
                first = false;
            }
            //new word ahead       
            if(*line == ' ')
                first = true;
            line++;        
        }    
    }

其中产生的内容: Nomis Tbeil!azzip

LIVE DEMO


请注意,反向打印功能极其难以阅读。 不要编写冗长而复杂的函数,而要编写小型且可重用的函数并通过将这些小块一起使用来构建复杂的功能。

您能想象一家汽车制造商一次性组装所有机器吗? 您能想象在组装底盘的活塞或电子设备上组装吗?将会是一团糟。 发动机是单独组装的,只有在组装完成后才能与汽车的其余部分组装在一起。用软件做同样的事情。

本文链接:https://www.f2er.com/2971059.html

大家都在问