2014-10-23 5 views
-3

Как я могу поменять элементы в файле? Если содержимое файла:Как поменять элементы в файле в C

AB CD EF GH 
aa bb cc dd ee 
1 2 3 4 5 6 7 

Если я хочу поменять местами элементы столбца 2 с 3. Выходной файл должен быть:

AB CD EF GH 
aa bb cc dd ee 
1 2 3 4 5 6 7 
AB EF CD GH 
aa cc bb dd ee 
1 3 2 4 5 6 7 

Как я могу это сделать с помощью C?

+1

И что вы сделали до сих пор? –

+1

Вы можете добиться этого с помощью ввода-вывода файлов в сочетании с strtok и некоторой условной логикой. – RPGillespie

+0

Почему вы хотите сделать это с помощью C? –

ответ

0

Это функция, которую я написал до сих пор. Эта функция вызывается многократно после извлечения каждой строки в функции main() с помощью функции fgets(). Входы в функцию - это строка, считанная из fgets(), и два номера столбцов, которые необходимо поменять местами. Внизу Код Матрица - это тип char ***, объявленный глобально.

char ** switch_column(const char * str, int col1, int col2) 
{ 
int count =0, str_length =0; 
const char delimiters[] = " \t"; 
char *token; 
char * tmp = strdup(str); 
int nLineChar_count =0; 
int mat_indx; 
char *place_holder; 
tok_count =0; 
Matrix[curr_line -1] = (char **)malloc(MAX_LINE_LENGTH*sizeof(char*)); 
str_length = strlen(str); 

printf("%d\n",str_length); 

token = strtok(tmp,delimiters); // Get first Token from the str 
Matrix[curr_line -1][0] = token; 
mat_indx =1; 
tok_count++; 
while(token || token != NULL) 
{ 
    token = strtok(NULL,delimiters); // Get all other tokens following the first in str 
    Matrix[curr_line -1][mat_indx++] = token; 

    printf("%s\n",token); 
    tok_count++; 
} 


if(Matrix[curr_line -1][col1-1] != NULL && Matrix[curr_line -1][col2-1] != NULL) 
{ 
    place_holder = Matrix[curr_line -1][col1-1]; 
    Matrix[curr_line -1][col1-1] = Matrix[curr_line -1][col2-1]; 
    Matrix[curr_line -1][col2-1] = place_holder; 
} 

return Matrix[curr_line -1]; 
} 
Смежные вопросы