Первая проблема с вашей функцией capitalLetter
заключается в неправильном определении параметров.
void capitalLetter(int vett1[], int vett2[], int i);
Ожидается, что вы передадите 2 массива int
, но вы передадите его в двамассивы char
.Ваш компилятор должен выдавать некоторые предупреждения об этой разнице типов, я надеюсь.Вы бы хотели, чтобы это выглядело так:
void capitalLetter(char vett1[], char vett2[], int i);
Ваш цикл может выходить за пределы конца строки, поскольку вы не проверяете его конец - вы проверяете размервесь массив.Вы должны остановить цикл, когда найдете такой NUL-символ, как этот.
for(i=0; vett1[i]!='\0'; i++)
Я не знаю, что вы пытались сделать с этой строкой:
vett1=vett2;
, но это нене имеет никакого смысла, так как это будет замена строки, которую вы обрабатываете, на пустую.Если вы хотите, чтобы vett2 содержал заглавные буквы, вы должны изменить эту строку на
vett2[j++]=vett1[i];
, что, как вы, вероятно, можете догадаться, также означает добавление новой переменной j
.Он заполняет массив vett2
каждой заглавной буквой и использует j
, чтобы он начинался с начала и заполнял его по мере продвижения, поскольку вы не можете использовать i
, так как это оставит пробелы.
Вы также передаете переменную i
без видимой причины.Вы можете объявить локальную копию в самой функции вместе с j
.
int i, j = 0;
И, выйдя за пределы цикла, вам нужно добавить терминатор NUL в vett2
, чтобы сделать его действительной строкой.
vett2[j]='\0';
Конечный результат будет выглядеть примерно так:
void capitalLetter(char vett1[], char vett2[]) {
int i, j = 0;
for(i=0; vett1[i]!='\0'; i++) {
if((vett1[i]>= 'A') && (vett1[i]<= 'Z')) {
vett2[j++]=vett1[i];
}
}
vett2[j]='\0';
printf("%s", vett2);
}