Member 13786151 Ответов: 3

Может ли кто-нибудь помочь преобразовать C++ в C?


#include <iostream>
#include <string>

using namespace std;

string modifiedSentence(string str, int len);
string sortedSentence(string sentence, int length);

int main(){
    string sentence = "";
    double length = 0;

    cout << "Prepared by ABC"<<endl;
    cout << "Class XYZ"<<endl;
    cout << "This program will take in a sentence from you and invert the letters in each individual words"<<endl;
    cout << "Type in a sentence with no more than 100 characters including space: "<<endl;
    getline (cin,sentence);
    length = sentence.length();
    cout << "String length is "<<length<<endl;
    cout << "The original sentence is "<<sentence<<endl;
    cout << "The modified sentence is "<<modifiedSentence(sentence, length)<<endl;
    cout << "The sorted sentence is "<<sortedSentence(sentence, length)<<endl;
    return 0;
}

string modifiedSentence(string str, int len) {
    int i, j, k;
    char tmp;

    for(i = 0, j = 0; j < len; j++){
        if(!isalpha(str[j]) || (j == len - 1)){
            if(j < len - 1){
                k = j - 1;
            } else {
                k = j;
            }

            while( i < k){
                tmp = str[i];
                str[i] = str[k];
                str[k] = tmp;
                i++;
                k--;
            }
            i = j + 1;
        }
    }
    return str;
}

string sortedSentence(string sentence, int length){
    string lower = "";
    string upper = "";
    string num = "";
    string symbols = "";
    int temp;
    for (int i = 0; i<sentence.length(); i++){
        if(islower(sentence[i])){
            lower += sentence[i];
        }
        if(isupper(sentence[i])){
            upper += sentence[i];
        }
        if(isdigit(sentence[i])){
            num += sentence[i];
        }
        if(!isalnum(sentence[i])){
            symbols += sentence[i];
        }
    }

    for (int i = 0; i<lower.length(); i++) {
        for (int j = i + 1; j < lower.length(); j++) {
            if (lower[i] > lower[j]) {
                temp = lower[i];
                lower[i] = lower[j];
                lower[j] = temp;
            }
        }
    }
    for (int i = 0; i<upper.length(); i++) {
        for (int j = i + 1; j < upper.length(); j++) {
            if (upper[i] > upper[j]) {
                temp = upper[i];
                upper[i] = upper[j];
                upper[j] = temp;
            }
        }
    }
    for (int i = 0; i<num.length(); i++) {
        for (int j = i + 1; j < num.length(); j++) {
            if (num[i] > num[j]) {
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
    }

    return lower+upper+num+symbols;
}


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

Кто-нибудь может помочь преобразовать C++ в C? потому что я был новичком в программировании и мой запрос на назначение использовать C. Спасибо

3 Ответов

Рейтинг:
2

CPallini

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

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 100

char * modify_sentence( const char * sentence, size_t length);

//TODO:
//char * sort_sentence(const char * sentence, size_t length);

int main()
{
  char sentence[SIZE];
  printf("Prepared by ABC\n");
  //...
  printf("Type in a sentence with no more than %d characters including space: \n", SIZE);
  fgets(sentence, SIZE, stdin);
  size_t len = strlen(sentence);
  if ( !len ) return -1;
  // handle the newline (if present)
  if ( sentence[len-1] == '\n')
  {
    sentence[len-1] = '\0';
    --len;
  }
  printf("Sentence length is %lu\n", len);
  printf("The original sentence is %s\n", sentence);

  char * modified_sentence = modify_sentence(sentence, len);
  if ( modified_sentence)
  {
    printf("The modified sentence is %s\n", modified_sentence);
    free(modified_sentence);
  }

  // TODO:
  //char * sorted_sentence = sort_sentence(sentence, len);
  //...
}

char * modify_sentence( const char * sentence, size_t length)
{
  char * s = (char *) malloc(length);
  if ( ! s ) return s;

  strncpy( s, sentence, length);
  // as before
  int i, j, k;
  char tmp;

  for(i = 0, j = 0; j < length; j++)
  {
    if(!isalpha(s[j]) || (j == length - 1))
    {
      if(j < length - 1)
        k = j - 1;
      else
        k = j;

      while( i < k)
      {
        tmp = s[i];
        s[i] = s[k];
        s[k] = tmp;
        i++;
        k--;
      }
      i = j + 1;
    }
  }
  return s;
}

//TODO:
//char * sort_sentence(const char * sentence, size_t length)
//{
//...
//}



[обновление]
Этот код содержит частичную реализацию sort_sentence функция.
То нижний, верхний, цифровой и не буквенно-цифровой подстроки группируются в возвращаемом значении. Сортировка подстрок отсутствует (оставлено в качестве упражнения).
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 100

char * modify_sentence( const char * sentence, size_t length);
char * sort_sentence(const char * sentence, size_t length);

int main()
{
  char sentence[SIZE];
  printf("Prepared by ABC\n");
  //...
  printf("Type in a sentence with no more than %d characters including space: \n", SIZE);
  fgets(sentence, SIZE, stdin);
  size_t len = strlen(sentence);
  if ( !len ) return -1;
  // handle the newline (if present)
  if ( sentence[len-1] == '\n')
  {
    sentence[len-1] = '\0';
    --len;
  }
  printf("Sentence length is %lu\n", len);
  printf("The original sentence is %s\n", sentence);

  char * modified_sentence = modify_sentence(sentence, len);
  if ( modified_sentence)
  {
    printf("The modified sentence is %s\n", modified_sentence);
    free(modified_sentence);
  }

  char * sorted_sentence = sort_sentence(sentence, len);

  if ( sorted_sentence )
  {
    printf("The sorted sentence is %s\n", sorted_sentence);
    free(sorted_sentence);
  }
}
char * modify_sentence( const char * sentence, size_t length)
{
  char * s = (char *) malloc(length);
  if ( ! s ) return s;

  strncpy( s, sentence, length);
  // as before
  int i, j, k;
  char tmp;

  for(i = 0, j = 0; j < length; j++)
  {
    if(!isalpha(s[j]) || (j == length - 1))
    {
      if(j < length - 1)
        k = j - 1;
      else
        k = j;

      while( i < k)
      {
        tmp = s[i];
        s[i] = s[k];
        s[k] = tmp;
        i++;
        k--;
      }
      i = j + 1;
    }
  }
  return s;
}

struct CharacterInfo
{
  int beg; // start index 
  int end; // pass-the-end index
  int (*fun)(); // discriminant function
};

int notisalnum(int c) { return (! isalnum(c)); }

char * sort_sentence(const char * sentence, size_t length)
{
  struct CharacterInfo ci[] = // this array is used to keep track of the substrings
  {
    { 0, 0, islower }, // start, pass-the-end, discriminant of lower characters
    { 0, 0, isupper }, //  "           "            "          upper    "
    { 0, 0, isdigit }, //  "           "            "          digit    "
    { 0, 0, notisalnum }//  "           "            "         not alphanumeric    "
  };

  const int LEN = sizeof(ci)/sizeof(ci[0]);

  char * s = (char *) malloc(length);
  if ( ! s ) return s;

  int n;
  int index = 0;
  for (n = 0; n < LEN; ++n)
  {
    int i;
    for (i = 0; i<length; ++i)
    {
      ci[n].beg = ci[n].end = index;
      if ( ci[n].fun(sentence[i]) )
      {
        s[index] = sentence[i];
        ++index;
        ++(ci[n].end);
      }
    }
  }
  // TODO: sort the substrings

  return s;
}

[/обновление]


Member 13786151

Большое спасибо Вам CPallini помогите в этом
Могу ли я знать, что мне нужно добавить на //TODO:
//тип char * sorted_sentence = sort_sentence(константный тип char * приговор, длина size_t), так что и упоминать?

CPallini

Ну, это та часть упражнения, которую я оставил вам.

Member 13786151

большое спасибо.
Я пытаюсь понять код, который вы предоставили.

CPallini

Добро пожаловать.

Member 13786151

Кпаллини, простите, что снова беспокою вас.
Я действительно пытаюсь понять код, который вы предоставили, но это действительно трудно для меня...
Я пытался несколько раз для sort_sentence, это было постоянно получать ошибку.
Могу я еще раз попросить вас о помощи? Спасибо.

Member 13786151

Пожалуйста, помогите!!! Пожалуйста!!!

CPallini

В чем именно заключается проблема?
Не могли бы вы опубликовать код (обновление вашего вопроса origianl)?

Member 13786151

Я не знаю, как сделать sorted_sentence, который вы оставили для меня...
Мне очень жаль CPallini, я действительно глуп в программировании, я пытался вставить код, но получал все ошибки, сумма больше я не понимаю коды.
Надеюсь, CPallini вы сможете мне помочь...Спасибо.

Member 13786151

Босс, пожалуйста...мне очень нужна твоя помощь...

CPallini

Вы еще не опубликовали свою попытку.

Member 13786151

Привет CPallini, не могли бы вы дать несколько советов по char * sorted_sentence = sort_sentence(const char * sentence, size_t length);?

Я действительно не знаю, с какой части начать 1-е, спасибо

CPallini

Смотрите мое решение для обновления.

Рейтинг:
12

OriginalGriff

Поиск кода в интернете, который, кажется, соответствует вашей домашней работе, а затем осознание того, что он не на правильном языке и не будет компилироваться, не поможет вам. На самом деле, получение кода из интернета вообще не поможет вам в долгосрочной перспективе. Только реальное выполнение работы научит вас чему-то реальному.

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

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Рейтинг:
0

Patrice T

Цитата:
Может ли кто-нибудь помочь преобразовать C++ в C?

Помощь, о которой вы просите, - это "делай мою работу". Это все равно, что попросить кого-то припарковать вашу машину, потому что вы ученик, это не поможет вам учиться.
Цитата:
потому что я был новичком в программировании и мое задание требовало использовать C.

Любое задание должно заставить вас практиковаться, потому что вы новичок, это цель заданий.
Совет: попробуйте, перевернуть струну не сложно, возьмите лист бумаги, карандаш и сделайте это вручную. Думайте о своей процедуре механически, это ваш алгоритм.

Методом проб и ошибок вы научитесь программировать, но вы должны попробовать.
Если вы столкнулись с конкретной проблемой, вернитесь и объясните свою проблему, чтобы получить некоторую помощь в ее устранении.