【问题标题】:Capitalize first letter in string in c将c中字符串中的第一个字母大写
【发布时间】:2013-10-26 00:14:31
【问题描述】:

我有问题。我拥有的这个函数需要清除所有非字母字符的字符串,同时将所有字母字符小写。使用指针,p_fast 检查字符串中的字符是否为isalpha;如果是,则将字符存储到p_slow。在整个字符串中执行此操作后,将添加一个 \0 字符以完成该字符串。在此之后,我需要将刚刚清理和小写的字符串中的第一个字母大写。

/**********************************************************************/
/*                      Clean up customer names                       */
/**********************************************************************/
void clean_names(int quantity,
                               struct customer *p_customer_records_start)
{
struct customer *p_customer;
char *p_fast = p_customer_records_start->customer_name,
*p_slow = p_customer_records_start->customer_name;


for(p_customer = p_customer_records_start;
     (p_customer-p_customer_records_start) < quantity; p_customer++)
{
    p_fast = p_customer->customer_name;
    p_slow = p_customer->customer_name;

while (*p_fast != END_OF_STRING)
{
    if(isalpha(*p_fast))
        *p_slow++ = tolower(*p_fast);
    p_fast++;
}

*p_slow = END_OF_STRING;

}
return;
}

我不知道如何回到字符串的开头。我在互联网上找不到任何东西。如果有人可以提供帮助,那就太好了!如果您需要更多信息,请尽管询问。

【问题讨论】:

  • 字符串的开头还在p_customer-&gt;customer_name
  • @Kninnug 我知道这一点,但toupper(*p_customer-&gt;customer_name); 没有效果。还有其他建议吗?
  • 你会想做*p_customer-&gt;customer_name = toupper(*p_customer-&gt;customer_name;,即分配字母。

标签: c string


【解决方案1】:

您从p_customer-&gt;customer_name 中的指针开始。最后,该指针仍然指向相同的位置(指向名称的开头)。您可以使用它来大写第一个字母。

【讨论】:

  • 我该怎么做。我已经尝试过toupper(*p_customer-&gt;customer_name);,但它什么也没做。
  • toupper 什么都不做,它返回一些东西。您必须将其分配到某个地方,就像在循环中使用 tolower() 一样。
  • @Barmar 我明白你的意思。我只是接受了你所说的并应用了它。有用!谢谢
【解决方案2】:

非常简单:toupper 每次调用只能处理一个字符。如果你这样做:

p_customer-&gt;customer_name[0]=toupper(p_customer-&gt;customer_name[0]);

它只大写第一个字母。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2013-02-21
    相关资源
    最近更新 更多