Есть ли способ, по которому вы разделили строку на токены, чтобы преобразовать эти токены назад в исходную строку (с пунктуацией и оригинальной чувствительностью к регистру)?Преобразование измененных токенов strtok обратно в «синтаксис» исходной строки
Я уверен, что будет вызываться strcat, но что было бы хорошим способом для поддержания пунктуации оригинальной строки & чувствительность к регистру?
Предположим, что мне нужно изменить каждый токен отдельно, прежде чем конкатенировать их обратно в структуру исходной строки.
Редактировать: название было изменено & уточнено, я надеюсь.
char* msg = malloc(10000);
char* msg2 = malloc(10000);
char* buffer;
char buffer2[10000];
printf("input: \n");
fgets(msg, 9999, stdin);
msg2 = strdup(msg);
buffer = strtok(msg2, " ;,.!?\n");
Node* ptr; // assume this is initialized to a linked list containing 2 strings per node (str, str2)
while (buffer) {
for (int i = 0; i < strlen(buffer); i++) { //strcmp is case-sensitive
if (isalpha(buffer[i])) {
buffer[i] = tolower(buffer[i]);
}
}
while (ptr) {
if ((ptr != NULL) && (strcmp(ptr->str, ptr->str2) != 0)) {
buffer = ptr->str2; // modifies the token
break;
}
}
ptr = ptr->next;
}
strcat(buffer2, " "); // this will concatenate the modified tokens back together with spaces
strcat(buffer2, buffer); // but I lose the original string's structure (i.e.: punctuation, case-sensitivity)
buffer = strtok(NULL, " ;,.!?\n");
printf("%s", buffer2); // so how should I get the original string's structure back with the modified tokens?
Ум ... Сохранить копию, прежде чем вы ее разделите? –
@KenWhite Мне нужно изменить каждый токен индивидуально, хотя так, чтобы я не делал много пользы, я думаю. Плюс у меня есть сохраненная копия: 'char * msg' нетронутой. – Sleepless
Проблема заключается в том, что если вы не нарушаете слова на одном разделителе или не сохраняете разделитель между каждым словом, невозможно воссоздать строку, потому что вы не знаете, какой разделитель был там изначально. Если вы просто хотите записать токены с промежутком между ними, см. 'Sprintf'. –