Как использовать заглавную букву в массиве - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь закончить свое первое домашнее задание в моем классе C.Цель состоит в том, чтобы найти массив, найти все строчные буквы E и преобразовать их в прописные буквы Es.

Я пробовал несколько вариантов после поиска часов здесь и в книге, но безрезультатно.Извиняюсь за вопрос новичка, поскольку я очень новичок в этом.

Мне не разрешено использовать какие-либо функции, кроме 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;
  }

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019
  • Вам необходимо знать разницу между строковым литералом , представленным между "" и символом , представленным между ''.

  • 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] ^= ' ';
    }
}
0 голосов
/ 19 сентября 2019

Я рекомендую проверить значение символов ASCII из таблицы ASCII.Если вы обратите внимание, вы увидите, что заглавные буквы будут начинаться с десятичного значения 65. Например: A = 65, B = 66, C = 67 и так далее.Начиная с 97 года, буквы в нижнем регистре.Следовательно, я проверял бы десятичное значение каждого символа и сравнивал бы его диапазон, больше или равен 97, и подставлял 32, если истина.Вы также можете установить свое состояние как> = 97 && <= 122. </p>

Чтобы не испортить ваш опыт обучения, я не предоставляю никакого кода, и должно быть довольно просто следовать и решать головоломку соответствующим образом.

#include <stdio.h>

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;

}

0 голосов
/ 19 сентября 2019

Я бы написал общую функцию для замены символа другим символом .... затем использовал бы его для замены '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)));
}

Теперь вы создали две полезные функции, которые можно использовать для других целей, а не одну очень явную функцию с именем capitalize_e * 1009.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...