繁体   English   中英

如何将数组中的特定字母大写

[英]How to capitalize specific letter in an array

我正在尝试在我的 C class 中完成我的第一个家庭作业。 目标是一个数组,找到所有小写 E 并将它们转换为大写 E。

在这里和书中搜索了几个小时后,我尝试了一些变化,但无济于事。 为新手问题道歉,因为我对此很陌生。

我不允许使用除 printf 和 random_letter 之外的任何功能,所以我发现的大部分内容都不适用。

这是来自测试程序的代码

include <stdio.h>
void capitalize_e(char s[]);

int main(int argc, char *argv[]) {
    char s[] = "The elephant in the room.";

   printf("String before capitalizing e's: %s\n", s);
   capitalize_e(s);

   printf("String after capitalizing e's: %s\n", s);
}

这是我最近的尝试。

#include <stdio.h>
 void capitalize_e(char s[], int size) {
  int i;
  char A = "e";
  char B = "E";
  for (i=0;i<size; i++) {
    if(s[i]==A)
      s[i]==B;
  }
  • 您需要知道""之间呈现的字符串文字''之间呈现的字符之间的区别。

  • s[i]==B其中双重相等运算符是错误的。 它用于判断条件是否为真。

  • void capitalize_e(char s[], int size)应该删除其中的第二个形式参数。 并且, for (i=0; s[i];= '\0' ; i++)应该应用。

我会将您的代码重写为类似于以下内容:

void capitalize_e(char s[], char lowerCaseChar) {
    for (size_t i = 0; s[i] ; i++) {
        if (s[i] == lowerCaseChar)
            s[i] ^= ' ';
    }
}

我会写一个通用的 function 来用另一个字符替换一个字符....然后用它用'E'替换'e'。

例如:-

char* replace_all(char* str, char target, char replacement) {
    char* s = str;
    while(*s != 0)  {
        if(*s == target) *s = replacement;
        s++;
    }
    return str;
}

int main() {
    char example[] = "The elephant in the room.";
    printf("%s", replace_all(example,'e', 'E'));
}

您提到了“random_letter”,但没有在您的问题中明确谈论它。 我假设,然后您可以构建类似以下的内容。

char* replace_all(char* str, char target, char replacement) {
    char* s = str;
    while(*s != 0)  {
        if(*s == target) *s = replacement;
        s++;
    }
    return str;
}

char capitalize(char c) {
    if(c >= 'a' && c <= 'z') return 'A' + (c -'a');
    return c;
}


int main() {
    char example[] = "The elephant in the room.";
    char letter = random_letter();
    printf("%s", replace_all(example,letter, capitalize(letter)));
}

现在您已经构建了两个可以重用于其他事情的有用函数,而不是一个非常明确的 function,称为 capitalize_e

我建议检查 ASCII 表中字符的 ASCII 值。 如果你注意,你会看到大写字母将从十进制值 65 开始。例如:A = 65,B = 66,C = 67 等等。 从 97 开始,字母为小写。 因此,我会检查每个字符的十进制值并比较其范围是否大于或等于 97,如果为真则替换为 32。 您还可以将条件设置为 >=97 && <=122。

为了不破坏您的学习体验,我没有提供任何代码,并且应该相当直接地遵循并相应地解决难题。

没关系,我只是在被否决后添加了一个简短的代码片段。

int main() {
   char myArray[] = "Hello World";

   for(int i = 0; i < sizeof(myArray); i++) {
     int decimalValueOfChar = myArray[i];
     if(decimalValueOfChar >= 97 && decimalValueOfChar <= 122) {
        decimalValueOfChar = decimalValueOfChar - 32;
        myArray[i] = decimalValueOfChar;
     } 
   }
   printf("%s", myArray);
   return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM