gpt4 book ai didi

c - 如何在c中输入一个段落的多行并根据行数排序

转载 作者:行者123 更新时间:2023-11-30 16:13:57 26 4
gpt4 key购买 nike

如何在C/C++中输入多行段落并根据行数排序(推荐)。例如:

New Service 23 44
Center Hall 11 43
Bharat Airline Hall 45 9

我们必须根据第一个数字对它们进行排序,即第一行为 23,第二行为 11,第三行为 45。

我尝试过结构,但它不起作用,也许getline函数可以得到一些帮助。

int main(void)
{
int maxLineCount = 500, maxCharCount = 500, i, j, count;

char *line = NULL;
size_t size;

char *a[maxLineCount];
for (i = 0; i < maxLineCount; i++)
a[i] = (char *)malloc(maxCharCount * sizeof(char));


int noOfLine = 0;
// read the input as line
while(getline(&line, &size, stdin) != -1) {
strcpy(a[noOfLine++],line);
}



for(i = 1; i < noOfLine; i++)
printf("%s", a[i]);

return 0;
}

结果应该是根据数字排序的行。所需输出:

Center Hall : 11 43
New Service : 23 44
Bharat Airline : 45 9

最佳答案

在 C++ 中,您可以编写一个“split”函数来使用 string::find 从行中提取索引。和 string::substr :

void split(const std::string str, std::vector<std::string>& result, char sep = ' ') {

std::size_t cur, prev = 0;

cur = str.find(sep);

while (cur != std::string::npos) {
result.push_back(str.substr(prev, cur - prev));

prev = cur + 1;

cur = str.find(sep, prev);
}

result.push_back(str.substr(prev, cur - prev));
}

然后使用multimap按排序顺序存储行。

int main(int argc, char* argv[]) {

std::string line;

std::multimap<int, std::string> sortedLines;

while (std::getline(std::cin, line)) {
std::vector<std::string> splitLine;

split(line, splitLine, ' ');

int splitCount = splitLine.size();

if (splitCount < 2) break;

int index = std::atoi(splitLine[splitCount - 2].c_str());

sortedLines.insert({ index, line });
}

然后就可以简单地输出多重贴图的内容了。

   for (auto l : sortedLines) {
std::cout << l.second << std::endl;
}
}
<小时/>

完整来源:

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

void split(const std::string str, std::vector<std::string>& result, char sep = ' ') {

std::size_t cur, prev = 0;

cur = str.find(sep);

while (cur != std::string::npos) {
result.push_back(str.substr(prev, cur - prev));

prev = cur + 1;

cur = str.find(sep, prev);
}

result.push_back(str.substr(prev, cur - prev));
}


int main(int argc, char* argv[]) {

std::string line;

std::multimap<int, std::string> sortedLines;

while (std::getline(std::cin, line)) {
std::vector<std::string> splitLine;

split(line, splitLine, ' ');

int splitCount = splitLine.size();

if (splitCount < 2) break;

int index = std::atoi(splitLine[splitCount - 2].c_str());

sortedLines.insert({ index, line });
}

for (auto l : sortedLines) {
std::cout << l.second << std::endl;
}
}

关于c - 如何在c中输入一个段落的多行并根据行数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57850052/

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