Работа со строками в Си
Вывести из текста на консоль слова, у которых в i-й позиции располагается одна и та же буква. В исходном тексте поменять местами первую пару таких слов и вывести результат на консоль./*а вот тут уже беда, преподаватель не очень внятно объяснял работу со строками, не первый день над справочником сижу и не могу разобраться*/
и что именно "не первый день" ты не можешь разобраться? Если вопрос в том - "решите за меня срочно" - то тема будет удалена как и все подобные темы. Если пытаешься разобраться - то пиши что именно не получается и ход своих рассуждений.
Цитата: kot_
и что именно "не первый день" ты не можешь разобраться? Если вопрос в том - "решите за меня срочно" - то тема будет удалена как и все подобные темы. Если пытаешься разобраться - то пиши что именно не получается и ход своих рассуждений.
Исходный текст записываю в строку, затем разбиваю его на лексемы(вот тут наверное 1я ошибка потому что лексемы записать в отдельный массив у меня не получается.)
Вот наверное в этом и дело, в остальном я разберусь.
ну строго говоря, тебе вообще-то вроде и не нужно записывать лексемы. Тебе достаточно хранить сроки и слова. Можно конечно делать это более оптимально - создавать индекс для каждого слова - это даст вероятно скорость поиска, но более сложно в реализации. Приведи тот код в котором у тебя не получается.
Вот мой код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i,op;
char *text = "text.txt", *text_out = "text_out.txt";
char textString[], *lexemsPtr, sym;
int main()
{
/*Îòêðûâàåì ôàéëû*/
FILE *inFile;
inFile = fopen(text, "rt+");
if(inFile == NULL)
{
printf("Error Open File %s!", text);
return 1;
}
FILE *outFile;
outFile = fopen(text_out, "wt+");
/*âûòàñêèâàåì èç ôàéëà òåêñò*/
fgets(textString, 1000, inFile);
printf("%s", textString);
printf("Enter number symbol: ");
scanf("%d", &op);
printf("Enter symbol: ");
scanf("%c", &sym);
/*ðàçáèâàåì òåêñò íà ñëîâà*/
lexemsPtr=strtok(textString," ");
if(lexemsPtr[op]==sym )
printf("%s\n", lexemsPtr);
while(lexemsPtr!=NULL)
{
if(lexemsPtr[op]==sym){
printf("%s\n", lexemsPtr);}
lexemsPtr=strtok(NULL," ");
}
/*çàêðûâàåì ôàéëû*/
fclose(inFile);
fclose(outFile);
getchar();
getchar();
return 0;
}
во вторых - уточните - речь идет о C или все же о С++.
Если я правильно понял задачу - то для начала вам необходимо сформировать массив строк. И в него уже загружать строки из файла. Ведь вам же не только надо найти слова с указанной буквой в указанной позиции - вам надо еще поменять местами первую пару. Т.е. должна хранится информация о строках (как минимум номер строки, в которых выполнять замену ) и позиция слова в строке.
Если речь идет о С++ - можно (нужно) использовать классы vector<string>. Если речь идет о С - то тут массив из С-строк (char array_str[4028][1024] - например).
а потом уже можно обрабатывать каждую строку - и находить в ней слова по указанным параметрам - теоретически таких слов в каждой строке может быть от 0 до длина строки - 2. В простейшем случае создаешь для таких слов второй массив (опять же в зависимости от языка - либо вектор, либо массив С-строк) - заполняешь его (так же сразу же можно запомнить номер строки для первого слова, и его индекс в строке, и то же самое для второго - в обычные переменные), выводишь. Затем сравниваешь первых два слова по размеру - если они одинаковые - хорошо, если нет - сохраняешь разницу (надо будет соответственно увеличить и уменьшить размер строк) - и выполняешь замену. Выводишь измененные строки. PROFIT. Можно еще сравнить слова - если они одинаковые - замены не выполняешь, и выводишь об этом сообщение.
вот кстати пример простейшей обработки массивов строк -