Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2011, 22:24   #1
FRATER1234
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 68
Вопрос Не могу переделать код из С++ в Си

Добрый вечер.
У меня здесь код есть который хочу переделать под Си язык
вот он
Код:
#include <string.h>
#include <conio.h>
#include <iostream>
using namespace std;
#define MAXL 255
 
 
int main(int argc, char* argv[])
{
 /*#1*/
 char str [MAXL+1];
 cout << "String? ";
 gets (str); //Используем gets, чтобы корректно вводились пробелы
 cout << "Vsego: " << sizeof (str)-1 << endl; //Всего имеется = размер массива
 cout << "Zaniato: " << strlen (str) << endl; //Занято = длина строки
 cout << "Svobodno: " << sizeof (str) - strlen (str) << endl; //Свободно = всего-длина строки
 
 /*#2*/
 int m, n;
 cout << endl << "m, n?" << endl;
 cin >> m; //Пользователь индексирует с 1
 cin >> n;
 cout << endl;
 if (m-1<0 || n>strlen(str)) cout << "No such index"; //Если не в границах индекса (т.е. для пользователя от 1 до длины слова)
 else {
  char nstr [MAXL+1];
  for (int i=m-1; i<n; i++) {
   nstr[i-m+10] = str[i]; //Записываем символы между m и n в новый массив
   cout << str[i]; //И заодно выводим их на экран
  } 
  nstr[n] = ' }
 
 /*#3*/
 cout << endl << "m, n?" << endl;
 cin >> m; //Пользователь индексирует с 1
 cin >> n;
 int l = strlen (str);
 if (m-1<0 || n>strlen(str)) cout << "No such index"; //Если не в границах индекса (т.е. для пользователя от 1 до длины слова)
 else {
  for (int i=0; i<l-n; i++) //Переписываем на место удаляемых элементов хвост массива
   str[i+m-1] = str[n+i];
  str [l-n+m-1] = '  cout << str;
 }
 
 /*#4*/
 cout << endl << "Symbol to search?" << endl;
 char c;
 cin >> c; cout << endl;
 for (int i=0; i<strlen(str); i++)
  if (str[i]==c) cout << i+1 << ' '; //Если символ совпадает - выводим его индекс+1 (поскольку строка нумеруется с нуля, а по заданию вывод с 1)
 
 /*5*/
 cout << endl << "Symbol to search?" << endl;
 char c1;
 cin >> c1; cout << endl;
 int last = -1; 
 for (int i=0; i<strlen(str); i++)
  if (str[i]==c1) last = i+1; //Последним запомненным и будет последний индекс
 if (last==-1) cout << "No such symbol";
 else cout << last;
 
 getch ();
 return 0;
}
А вот сами и задания это так чтоб разобрались что к чиму
1. Пользователь вводит строку с клавиатуры в фиксированный массив. Необходимо проверить, cколько элементов массива теперь занято и сколько свободно.

2. Показать на экран с m по n символов строки, введенной пользователем и записать данный отрезок в другой массив. (m и n также вводятся пользователем)

3. Удалить с m по n символов, перезаписать строку и показать ее на экран.

4. Пользователь вводит отдельно строку и символ, необходимо показать на экран номера по порядку всех совпадений (нумерация с единицы).

5. Пользователь вводит отдельно строку и символ, необходимо показать на экран номер только последнего совпадения (нумерация с единицы).

За ранее буду благодарен в помощи
Нужна помощь в переделке его под Си
FRATER1234 вне форума Ответить с цитированием
Старый 01.11.2011, 23:47   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вместо cin/cout изучайте функции scanf, printf соответственно.
Кроме того, C (по крайней мере, в исполнении старых компиляторов, за стандарт не скажу) не даёт объявлять переменные в середине функции.

Если всё же решитесь разбить код на отдельные функции, следует учесть, что func() в C понимается как функция, принимающая на вход int. Пишите func(void).
С остальным вроде бы проблем нет. Ну, <iostream> и std убрать куда подальше.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2011, 00:07   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Abstraction
Цитата:
Если всё же решитесь разбить код на отдельные функции, следует учесть, что func() в C понимается как функция, принимающая на вход int.
void foo() {} - функция принимает неограниченное кол-во параметров различных типов
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.11.2011, 00:20   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Упс.
Извиняюсь. Совет явно писать аргументы, впрочем, в силе.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2011, 00:31   #5
FRATER1234
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 68
По умолчанию

cout << "Vsego: " << sizeof (str)-1 << endl; чем можно заменить например sizeof?
FRATER1234 вне форума Ответить с цитированием
Старый 02.11.2011, 00:32   #6
FRATER1234
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 68
По умолчанию

там кстати код ругаеться почемуто не могу понять пишет якобы скобка не поставлена правельно или точка с запятой
FRATER1234 вне форума Ответить с цитированием
Старый 02.11.2011, 01:12   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
чем можно заменить например sizeof?
М-м-м... MAXL?
Цитата:
там кстати код ругаеться почемуто не могу понять пишет якобы скобка не поставлена правельно или точка с запятой
Можно дословно? Строка, содержание ошибки.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2011, 10:43   #8
FRATER1234
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 68
По умолчанию

Error 3 error C2001: newline in constant c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 31 1 Proga 2
Error 6 error C2146: syntax error : missing ';' before identifier 'cout' c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 34 1 Proga 2
Error 8 error C2001: newline in constant c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 42 1 Proga 2
Error 9 error C2015: too many characters in constant c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 42 1 Proga 2
Error 10 error C2143: syntax error : missing ';' before '}' c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 43 1 Proga 2
Error 13 error C1075: end of file found before the left brace '{' at 'c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp(9)' was matched c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 65 1 Proga 2
14 IntelliSense: missing closing quote c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 31 13 Proga 2
15 IntelliSense: expected a ';' c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 34 2 Proga 2
16 IntelliSense: missing closing quote c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 42 19 Proga 2
17 IntelliSense: expected a ';' c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 43 2 Proga 2
Вот ошибки кода и вчом проблема не могу понять
FRATER1234 вне форума Ответить с цитированием
Старый 02.11.2011, 10:48   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Error 3 error C2001: newline in constant c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 31 1 Proga 2
Error 6 error C2146: syntax error : missing ';' before identifier 'cout' c:\users\narvell3\documents\visual studio 2010\projects\proga 2\proga 2\proga.cpp 34 1 Proga 2
Как несложно увидеть, сообщения относятся к строкам 31 и 34 кода. Номера строк в Студии можно увидеть в нижней панели. Цитирую строки с 31 по 34:
Код:
  nstr[n] = ' }
 
 /*#3*/
 cout << endl << "m, n?" << endl;
Это ошибка что в C, что в C++.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2011, 10:55   #10
FRATER1234
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 68
По умолчанию

хм а как подправить просто я убрал тупо всю строку
Код:
nstr[n] = ' }
Уже ошибки нету но ругаеться на cout в №3 задачи там вот этот код его смушает
Код:
 cout << endl << "m, n?" << endl;
 cin >> m; //Пользователь индексирует с 1
 cin >> n;
 int l = strlen (str);
 if (m-1<0 || n>strlen(str)) cout << "No such index"; //Если не в границах индекса (т.е. для пользователя от 1 до длины слова)
 else {
  for (int i=0; i<l-n; i++) //Переписываем на место удаляемых элементов хвост массива
   str[i+m-1] = str[n+i];
  str [l-n+m-1] = '  cout << str;
 }
FRATER1234 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна переделать код СИ daimonTM Помощь студентам 0 31.05.2011 23:14
переделать с делфи код в СИ Dezolyator Фриланс 7 24.05.2010 23:19
Как переделать код? P®o©omp@s Помощь студентам 2 26.10.2009 19:21
Переделать код Hepri Работа с сетью в Delphi 3 20.08.2009 20:28
Помогите переделать код stayer Общие вопросы Delphi 3 25.10.2008 21:09