Я пытаюсь заменить последнюю часть строки, используя цикл for backward for, повторяющийся для каждого элемента исходной строки, и присваиваю первой (последним элементам, потому что я повторяю в цикле back) элементы строку scl = "SCL_10m.tif"
, а остальные, когда счетчик достигнет значения ниже 15, затем получают все символы из строки string
и присваивают их newString
. Однако в итоге получается:
The old string was: S2_2018_08_09_B02_10m.tif
The new string is S2_2018_08_09_B0old string:
Что отличается от моего ожидаемого результата:
The new string is S2_2018_08_09_SCL_10m.tif
Я не знаю, что это произошло. Предполагалось, что он будет перебирать все элементы newString
, поскольку он имеет тот же размер, что и исходная строка. Я проверил некоторые строковые функции замены в C, но я хотел реализовать кое-что, что поможет мне быстро в этой конкретной подстроке замены в проблеме String.
Работа со String в C очень сложна, и я все еще изучаю некоторую теорию об этом, такую как: нулевой байт и так далее. Исходя из JavaScript, Python и Ruby, где больше этих функций уже реализовано в некоторой стандартной библиотеке, я нахожу очень трудным и в то же время полезным получить представление о том, как реализовать такие алгоритмы с нуля для решения конкретных проблем в моемкод. Я ценю любую идею или подсказку о том, что происходит в коде ниже:
/******************************************************************************
Replace last 11 characters in a longer string
by the values of a smaller (11-char long) string.
*******************************************************************************/
#include <stdio.h>
#include <string.h>
int main()
{
char *string;
string = "S2_2018_08_09_B02_10m.tif";
char *scl;
scl = "SCL_10m.tif";
int length = 0;
int length_scl = 0;
length_scl = strlen(scl);
length = strlen(string);
char newstring[length];
int i;
int cntr = length;
for (i = length; i >= 0; i--)
{
if(cntr > 15){
newstring[i] = scl[i];
cntr--;
}
else if(cntr <= 15)
{
newstring[i] = string[i];
}
}
printf("The old string was: %s\n", string);
printf("The new string is %s:\n", newstring);
return 0;
}