【问题标题】:C How to Capitalize character after punctuation mark without Arrays?C如何在没有数组的标点符号后大写字符?
【发布时间】:2015-09-16 05:46:16
【问题描述】:

我是 C 编程语言的新手,我很好奇如何在不使用数组的情况下在标点符号后的程序中大写字母。我尝试通过减去 32 来使用 ASCII 代码值,但它似乎在我的代码中不起作用。这是我输出字母的代码的一部分。我认为 word = word - 32 会起作用,但在运行程序时它什么也没做。非常感谢您的帮助!

while ((word = getchar()) != EOF && word != '\n'){
        if (word == ' ' || word == '.' || word == '?' || word == '!' || word == '(' || word == ')' || word == '*' || word == '&' || word == ';' || word == ':'){
            printf("\n");
            word = word - 32;
        }

        if ((word >= 'A' && word <= 'z')){
            printf("%c", word);
        }

    }

【问题讨论】:

  • 是 C 还是 C# ?此外,您希望将标点符号 之后的字母大写,但您的代码会尝试对本身就是标点符号的字母进行大写!使用调试器。
  • 用 C 而非 C++ 编写程序
  • @Johnson - C、C++ 和 C# 是三种不同的语言。
  • 欢迎来到 Stack Overflow。请尽快阅读About 页面。对于某些代码集,word - 32 实际上会将小写字母转换为相应的大写字母,但没有有意义的标点符号映射。减法对于大小写转换是个坏主意;您应该改用&lt;ctype.h&gt; 的设施,例如tolower()。您可能需要记录何时看到标点符号,然后当您下次看到字母时,将其大小写转换为大写(并将标志设置回“不在标点符号之后”)。还有一个ispunct()

标签: c string loops


【解决方案1】:

您可以使用一个标志来检查最后一个输入是否是标点符号,然后根据该标志更改下一个输入并重新设置它

char word;int flag=0;
while ((word = getchar()) != EOF && word != '\n'){
    if(flag==1){
        printf("\n");
        word = word - 32; flag=0;
    }
    if (word == ' ' || word == '.' || word == '?' || word == '!' || word == '(' || word == ')' || word == '*' || word == '&' || word == ';' || word == ':'){
      flag=1;
    }

    if ((word >= 'A' && word <= 'z')){
        printf("%c", word);
    }
}

【讨论】:

  • 请注意,您通常不应创建自己的以下划线开头的符号。 ISO/IEC 9899:2011 §7.1.3 保留标识符部分说明: — 以下划线和大写字母或另一个下划线开头的所有标识符始终保留用于任何用途。所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。它比“不要使用前导下划线”更细微,但不是很多.
  • @JonathanLeffler 感谢您的洞察力,我会处理这种情况
  • 从什么时候开始在&amp; 符号后大写?
  • @RedX:因为问题要求您这样做。您也可以在空格后大写。事实上,这个问题对标点符号的定义是曲折的。它会生成很多换行符。
  • @JonathanLeffler 嗯,好吧。
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多