Member 13677678 Ответов: 2

Помогите мне с моим кодом


у меня есть пост-лабораторный вопрос в университете
и я попытался написать код, но он не сработал

это мой пост-лаборатория вопрос:

Форма множественного числа существительных

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

Эта модель не всегда делает английские формы множественного числа правильно, но она работает в большинстве случаев. Забудьте о реальных правилах, которые вы знаете при решении задачи, и используйте заявление как формальный документ.

Вам дается несколько существительных в единственном числе, и ваша программа должна перевести их во множественное число, используя следующие правила:

· Если единственное существительное заканчивается на ch, x, s, o, то множественное число образуется путем добавления es. Например, ведьма- "Ведьмы", помидор-"помидоры".

· Если существительное заканчивается на F или Fe, во множественном числе форма заканчивается весь. Например, лист-> листья, нож-> ножи. Обратите внимание на букву f, ставшую v.

· Существительные, оканчивающиеся на y, меняют окончание на ies во множественном числе. Например, семья-> семьи.

· Во всех остальных случаях множественное число образуется путем сложения s. Например, книга->книги.


Ввод (чтение из файла)

Чтение из файла (file1.txt) много слов. Слово состоит из 2 до 25 строчных латинских букв. Это не гарантирует, что данные слова являются реальными английскими словами из словаря.

Вывод (запись в файл)

Выведите n заданных слов во множественном числе на отдельных строках файла. Держите слова в том же порядке, в каком они даны во входных данных.

Что я уже пробовал:

я начинаю писать вот так



#include <iostream>
#include <string>
#include <fstream>
using namespace std;


int main(){
	string singular;
	ifstream writing;
	ifstream reading;
	writing.open("singular.txt");

	while (!writing.eof())
	{
	cin>>singular;
		writing>>singular;
		for(int i=0;i<singular.length();i++)
			if (singular[i]>='a' && singular[i]<='z')
				continue;
			else 
			break;

			if (singular.length()-1=='o' || singular.length()-1=='x' || singular.length()-1=='s' )
				writing>>singular+"es\n";
			else if ( singular.length()-1=='f')
				writing>>singular+"ves\n";
			else if (singular.length()-2=='ch')
				writing>>singular+"es\n";
			else if (singular.length()-2=='fe')
			{	writing>>singular+"ves\n";
			writing>>singular.erase(singular.length()-1)+"ies\n";}

     		else if ( singular.length()-1=='y')
				
				writing>>singular.erase(singular.length()-1)+"ies\n";
			else
				writing>>singular+"s\n";

	}
	
	
writing.close();
return 0;}

CPallini

А в чем проблема вашего кода?

OriginalGriff

"это не сработало" - это один из отчетов об ошибках, которые мы получаем довольно часто, и он всегда совершенно бесполезен-он ничего не говорит нам о вашей проблеме, кроме "У меня есть проблема", и мы знали это, потому что вы задаете вопрос!

Что он сделал такого, чего вы не ожидали, или не сделали того, что вы сделали?
Когда он это сделал?
Есть ли какие-либо сообщения об ошибках?
Что вы сделали, чтобы заставить его сделать это?
Что вы пытались сделать, чтобы выяснить, почему?
Каковы же были результаты?
Какая помощь вам нужна?

Это все вопросы, на которые нам нужен ответ - или мы вообще не сможем вам помочь!

Member 13677678

ну ,когда я запускаю его, он показывает мне черный экран и позволяет мне написать слово
а потом ничего не происходит
он не записал в файл и даже не создал файл
я не знаю почему потому что этот способ работал в лаборатории
// я работаю над visual studio 2012

2 Ответов

Рейтинг:
2

OriginalGriff

Первое, что вам нужно сделать, это научиться использовать отладчик!
Это инструмент, встроенный в Visual studio, который позволяет запускать код и полностью контролировать происходящее, просматривая данные, выполняя строки одну за другой и вообще следя за тем, что происходит.
Так что все будет зависеть от тебя. Начать здесь: Пошаговое руководство: отладка проекта (C++)[^]

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
1

Richard MacCutchan

Почему вы читаете текст из потока под названием writing? и каждая ссылка на этот поток считывает данные, в то время как измененные данные должны быть записаны. Подумайте о шагах, которые вам нужно выполнить в логическом порядке.

InStream reader = // open the input file
OutStream writer = // open as output
While NOT end of file on reader
    read next token into the string variable
    if the string ends with "ch", or "x", or "s", or "o"
        Add "es" to the end
    else if ... other tests here

    write the amended string to the output file
// continue the while loop
close both files and end