gpt4 book ai didi

c++ - 为什么我的插入排序函数不会更改我从 int main 传递的数组?

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:33 25 4
gpt4 key购买 nike

简短版本(使用硬连线输入)

#include <iostream>
#include <string>
#include <vector>

using namespace std;


void insertionSort(string theArray[], int n)
{
//unsorted = first index of the unsorted region,
//loc = index of insertion in the sorted region,
//nextItem = next item in the unsorted region,
//Initially, sorted region is theArray[0]
// unsorted region is theArray [1..n-1].
//In general, sorted region is theArray[0..unsorted-1],
// unsorted region theArray[unsorted.. n-1]

for(int unsorted = 1; unsorted< n; unsorted++)
{
//At this point, theArray[0..unsorted-1] is sorted.
//Find the right position (loc) in theArray[0..unsorted]
//for theArray[unsorted], which is the first entry in the
//unsorted region; shift, if necessary, to make room

string nextItem = theArray[unsorted];
int loc = unsorted;

while( (loc > 0) && (theArray[loc-1] > nextItem) )
{
//shift theArray [loc -1] to the right
theArray[loc] = theArray[loc-1];
}

// At this point, theArray[loc] is where nexItem belongs
theArray[loc] = nextItem; // Insert nextItem into sorted region
loc--;
}// end for
}


int main()
{
vector<string> token;
int countToken;

string input= "I,love,doing,nothing,at,all";

int count =0;
for(int i=0; i< input.length(); i++)
{
if(input[i] == ',')
count++;
}



countToken = count +1;

for(int i=0; i< countToken; i++)
{
int x= input.find(',');
token.push_back(input.substr(0,x));
input = input.substr(x+1);
}


cout << endl << "Current String: ";
for(int i =0; i< countToken; i++)
{
cout << token[i] <<" " ;
}

cout << endl;


string theArray[countToken];

for(int i =0; i< countToken; i++)
{
theArray[i] = token[i];
}

insertionSort(theArray, countToken);

cout << "SORTED: " ;

for(int i =0; i< countToken; i++)
{
cout << theArray[i] << " ";
}


return 0;
}// main

完整版

#include <iostream>
#include <string>
#include <vector>

using namespace std;


void insertionSort(string theArray[], int n)
{
//unsorted = first index of the unsorted region,
//loc = index of insertion in the sorted region,
//nextItem = next item in the unsorted region,
//Initially, sorted region is theArray[0]
// unsorted region is theArray [1..n-1].
//In general, sorted region is theArray[0..unsorted-1],
// unsorted region theArray[unsorted.. n-1]

for(int unsorted = 1; unsorted< n; unsorted++)
{
//At this point, theArray[0..unsorted-1] is sorted.
//Find the right position (loc) in theArray[0..unsorted]
//for theArray[unsorted], which is the first entry in the
//unsorted region; shift, if necessary, to make room

string nextItem = theArray[unsorted];
int loc = unsorted;

while( (loc > 0) && (theArray[loc-1] > nextItem) )
{
//shift theArray [loc -1] to the right
theArray[loc] = theArray[loc-1];
}

// At this point, theArray[loc] is where nexItem belongs
theArray[loc] = nextItem; // Insert nextItem into sorted region
loc--;
}// end for
}


int main()
{
vector<string> token;
int countToken;
while(1)
{
int answer;
cout << "MENU: " << endl;
cout << "1. Input String " << endl;
cout << "2. Sort " << endl;
cout << "3. Quit " << endl;
cout << endl;
cout << "Response: ";
cin >> answer;
cin.ignore(1000, 10);

if( answer == 1) // case 1. Input String
{

string input;
cout << endl << "Default delimiter is ','"<< endl << "Enter String: " ;
getline(cin, input);

// find delimiter
int count =0;
for(int i=0; i< input.length(); i++)
{
if(input[i] == ',')
count++;
}

//cout << "Count: "<< count <<endl;

//clear previous vector
token.clear();

countToken = count +1;

for(int i=0; i< countToken; i++)
{
int x= input.find(',');
token.push_back(input.substr(0,x));
input = input.substr(x+1);
}

//cout << "countToken: " << countToken << endl;

cout << endl << "Current String: ";
for(int i =0; i< countToken; i++)
{
cout << token[i] <<" " ;
}

cout << endl;
}
else if(answer == 2) // case 2. Sort
{
string theArray[countToken];



for(int i =0; i< countToken; i++)
{
theArray[i] = token[i];
}

//cout << "COUNTTOKEN: "<< countToken;
insertionSort(theArray, countToken);

cout << "SORTED: " ;

for(int i =0; i< countToken; i++)
{
cout << theArray[i] << " ";
}
}
else if(answer == 3)
{

break;
}
else
{
cout << endl << "Invalid input !" << endl << endl;
}

cout << endl;
}// while

return 0;
}// main

您好,简单介绍一下我的程序。我要求用户输入一组以','作为分隔符的字符串,以便在每次找到','时将字符串切掉,并将其插入 vector ,然后将其传递给数组,然后将数组传递给插入排序功能。 (注意:如果字符串中包含任何空格,程序将无法正确切割)

但是,我的插入排序函数似乎并没有改变我正确传递的数组。当我调用该函数时,我的程序甚至崩溃了。我读了一篇文章,它说默认情况下数组是通过引用传递的 因此,我认为函数参数中的“&”符号对于更改 main 中的数组不是必需的。

我希望有人能弄清楚我的程序中缺少什么任何意见将不胜感激

谢谢

最佳答案

主要问题是你没有在循环中改变loc的状态。

while( (loc > 0) && (theArray[loc-1] > nextItem) )
{
//shift theArray [loc -1] to the right
theArray[loc] = theArray[loc-1];

//add this
loc--; // move to the left so that the shift can go on
}

关于c++ - 为什么我的插入排序函数不会更改我从 int main 传递的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19129100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com