В соответствии с вашим кодом, если текущий символ "."
, то вы делаете то, что хотите внутри if condition
. Рассмотрим случаи, когда текущий символ не равен "."
. Вы просто копируете исходный абзац, который заменяет предыдущие символы в newParagraph
.
Say вход: Dude. dude.
Если текущий символ является первым .
, то newParagraph
в конце итерации:
Dude. D___
где _
указывает символы еще не заполнены.
Но, в следующих четырех итерациях, мы не находим .
. Таким образом, вы копируете данные из input
в newParagraph
, тем самым переписывая изменения.
Dude. dude.
EDIT:
Ваш код пытается преобразовать первый символ каждого предложения в верхний регистр. Вот как это должно быть изменено:
char capSentStart(char paragraph[], char newParagraph[])
{
int new_paragraph_idx=0;
for(int i = 0; i < 301; ++i)
{
if(paragraph[i] == '.' && paragraph[i + 1] == ' ')
{
newParagraph[new_paragraph_idx++] = '.';
newParagraph[new_paragraph_idx++] = ' ';
newParagraph[new_paragraph_idx++] = ' ';
newParagraph[new_paragraph_idx++] = toupper(paragraph[i + 2]);
++i;
}
else
{
newParagraph[new_paragraph_idx++] = paragraph[i];
}
}
}
Положите new_ptr
, который фактически заполняет newParagraph
отдельно, таким образом предотвращая помарки. А также позаботьтесь о границах струн. В противном случае вы можете получить SIGSEGV
Будьте осторожны с индексами и границами. – Maroun
Научитесь использовать отладчик, это поможет вам найти решения таких проблем. –
Он меняет 'newParagraph', когда он сталкивается с периодом. Но вам нужно подумать о том, что он делает в * последующих * итерациях цикла. – jogojapan