при подсчете длины двузначной строки дублируется последний символ, как исправить?
Дублируется длина, где должна быть 10 - 100, где 11 - 111. Но с однозначными длинами все в порядке.
//функция обработки содержимого файла
void obrabotka_file(char* fname_i, char* fname_r)
{
FILE* in, * out; //исходный и результирующий файлы (потоки)
char st_in[RAZ]; //обрабатываемая строка
char st_out[RAZ]; //результирующая строка
vector <char>* v;
char* p = new char(RAZ); //указатель на выделенное слово
in = fopen(fname_i, PR_R); //открываем файл на чтение
out = fopen(fname_r, PR_W); //открываем файл на запись
fgets(st_in, RAZ, in); //читаем первую строку из файла in
while (!feof(in)) //пока не найден признак конца файла
{
st_out[0] = '\0'; //очищаем результирующую строку
p = strtok(st_in, " \n"); //выделяем первое слово (лексему).
while (p) //Пока очередное слово выделено
{
//обрабатываем слово
strcat(st_out, p); //добавляем слово к результату
string s = to_string(strlen(p));
for (int j = 0; j < s.length(); j++)
strcat(st_out, &s[j]);
strcat(st_out, " "); //добавляем пробел между слов
p = strtok(NULL, " \n"); //выделение последующих слов
}//while(p)
st_out[strlen(st_out) - 1] = '\0'; //последний символ нулевой
if (strlen(st_out)) //если строка не пустая
fprintf(out, "%s\n", st_out); //записываем строку в новый файл
fgets(st_in, RAZ, in); //считываем новую строку из файла
}//while(!feof(in))
fclose(in); //Закрываем файл in
fclose(out); //Закрываем файл out
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
А вы не хотите немного проще?
void obrabotka_file(const char* fname_i, const char* fname_r)
{
FILE* in, * out; //исходный и результирующий файлы (потоки)
in = fopen(fname_i, "rt"); //открываем файл на чтение
out = fopen(fname_r, "wt"); //открываем файл на запись
if (!in || !out) { fprintf(stderr,"File error\n"); return; }
for(int counter = 0, c, state = 0; (c = fgetc(in)) != EOF; fputc(c,out))
if (isspace(c))
{
if (state == 1)
{
fprintf(out,"%d",counter);
counter = 0;
state = 0;
}
}
else
{
counter++;
state = 1;
}
fclose(in); //Закрываем файл in
fclose(out); //Закрываем файл out
}
