循环和strcpy

时间:2013-10-23 01:20:43

标签: c++ string loops for-loop strcpy

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int n;

    cout << "Enter n: ";
    cin >> n;
    cout << "Enter " << n << "names";

    for(int i=0; i<n; i++)
    {





    system("pause>0");
    return 0;
}

这是我未完成的代码。我需要输入一个号码,然后它会要求我输入n个名字。输入名称后,程序应按字母顺序对名称进行排序。我将如何在循环中做到这一点?我在循环部分非常困惑。是的,我知道当我完成循环时我会编码什么。我只是困惑并且在这部分遇到了问题。在此先感谢!

1 个答案:

答案 0 :(得分:1)

以下是您尝试执行的STL版本:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <string>
#include <algorithm>

int main() {
    std::vector<std::string> names;

    int num = 0;
    std::cout << "Please enter a number: ";
    std::cin >> num;
    std::cout << "\n";

    std::string name;

    for (int i = 0; i < num; ++i) {
        std::cout << "Please enter name(" << (i+1) << "): ";
        std::cin >> name;
        names.push_back(name);
    }

    //sort the vector:
    std::sort(names.begin(), names.end());

    std::cout << "The sorted names are: \n";

    for (int i=0; i<num; ++i) {
        std::cout << names[i] << "\n";
    }

    return 0;
}

但是,此版本是区分大小写的排序,因此无论是否符合您的要求都可能会出现问题。因此,接近不区分大小写的排序的下一步可能是在向量排序之前使用这段代码:

    //transform the vector of strings into lowercase for case-insensitive comparison
    for (std::vector<std::string>::iterator it=names.begin(); it != names.end(); ++it) {
        name = *it;
        std::transform(name.begin(), name.end(), name.begin(), ::tolower);
        *it = name;
    }

此方法唯一需要注意的是,所有字符串都将转换为小写字母。

参考文献:

https://stackoverflow.com/a/688068/866930

How to convert std::string to lower case?