Логическая проблема или проблема синтаксиса с функцией сортировки String - PullRequest
0 голосов
/ 09 мая 2020

Я новичок в C ++ и кодировании в целом. Я пытаюсь создать простую программу, которая, по сути, состоит из двух слов и сообщит вам, являются ли эти два слова анаграммами или нет. Я также понимаю, что, вероятно, существует заранее созданная функция для сортировки строки, например массива, однако я Я пытаюсь asp переработать саму концепцию и, следовательно, почему я пытаюсь создать функцию.

Вот небольшой фрагмент кода, который я написал до сих пор.

Фрагмент кода

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я вызываю функцию для сортировки строки, строка не сортируется! Извините, если есть простое решение, я новичок. Это логическая проблема или синтаксис? Большое вам спасибо!


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

//Function Declarations
string sortString(string user_input);

//Program Body
int main()
{
    string user_input_one, user_input_two;
    cout << "Welcome to Sandip's Anagram Checker! \nPlease Input two words that you'd like the check!";
    sortString(user_input_one);
    sortString(user_input_two);
    if (user_input_one == user_input_two)
        cout << "These two words are Anagrams of each other!";
    else
        cout << "These are not Anagrams!";
    return 0;
}

//Function Definations
string sortString(string user_input)
{
    string temp_string = user_input;
    int i,j;
    for (i = 0; i<user_input.length();i++)
    {
        for (j=0; j<user_input.length();j++)
        {
            if (user_input[i] == user_input[j])
            {
                temp_string[i] = user_input[j];
            }
            else if (user_input[i] > user_input[j])
            {
                temp_string[i] = user_input[j];
            }
            else if (user_input[i] < user_input[j])
            {
                temp_string[i] = user_input[i];
            }

        }
    }
    return temp_string;
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Добавляя к ответу Даниэля, вам не нужна временная строка в функции сортировки, просто обработайте переданную строку и верните ее. Также рассмотрите возможность поддержки буквенных регистров, вы можете использовать std :: transform из библиотеки STL algorithm.

#include <algorithm>

Добавьте это до цикла в вашей функции сортировки или после ввода входных данных в main.

transform(user_input.begin(), user_input.end(), user_input.begin(), ::tolower);
0 голосов
/ 09 мая 2020

Есть пара проблем. На самом деле вы не читаете вводимые пользователем данные. Вы можете исправить это, добавив cin >> user_input_one >> user_input_two;.

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

string temp_string = user_input;
    int i, j;
    for (i = 0; i < user_input.length(); i++)
    {
        for (j = i + 1; j < user_input.length(); j++)
        {
            if (temp_string[j] < temp_string[i]) {
                swap(temp_string[i], temp_string[j]);
            }
        }
    }
    return temp_string;

Наконец, как прокомментировал @cigien, вы не используете отсортированный результат . Вы можете изменить это, заменив свои линии вызова sortstring() на это:

user_input_one = sortString(user_input_one);
user_input_two = sortString(user_input_two);
...