C ++将字符串数组的元素存储到变量中

时间:2018-09-26 20:10:15

标签: c++ arrays string char

我目前正在用C ++编写代码,并且对它还很陌生。我遇到了将字符串数组的元素转换为变量的问题。 cout语句dcity [selection-1]按预期工作。但是,我无法将dcity [selection-1]存储到名为离开位置的变量中。 Visual Studios给我一个错误,即从字符串到char没有合适的转换函数。有人对如何正确存储此有意见吗?谢谢!

int main()
{

int selection = 0;
char departureLocation;


std::string dcity[] = { "Seattle Detroit Seattle Chicago Houston Seattle" };
std::cout << "Please choose a number from the list";
std::cin >> selection;
std::cout << dcity[selection-1];


departureLocation=dcity[selection-1]

};

5 个答案:

答案 0 :(得分:2)

由于C ++是一种强类型语言,因此它不喜欢类型不匹配。 您已通过以下方式声明了变量:

char departureLocation;

这意味着离开位置是char类型的变量或单个字符。因此,“ C”可以进入离开位置,而“芝加哥”则不能,因为它不仅仅是一个字符。

您还这样声明了数组:

std::string dcity[] =

在这里,您已将数组的类型定义为std :: string。所以数组的元素是字符串,而不是字符。

简而言之,就是在声明字符串时,需要将离开位置的类型更改为字符串,而不是char。像这样:

std::string departureLocation;

我在上面的代码中也没有看到任何include语句。为了使C ++能够识别字符串类,您需要确保以下内容位于代码顶部:

#include <string>

答案 1 :(得分:1)

dcitystd::string的数组。 departureLocationchar,只能容纳一个字符。要存储(复制)数组dcity的元素,departureLocation的类型必须为std::string(或可以从std::string构造的任何其他类型):

std::string dcity[] = { "Seattle Detroit Seattle Chicago Houston Seattle" };
std::string departureLocation = dcity[0];

请注意,dcity是仅包含一个元素的数组。也许您想要一个每个城市都是单独的数组元素的数组:

std::string dcity[] = { "Seattle", "Detroit", "Seattle",
                        "Chicago", "Houston", "Seattle" };
std::string departureLocation = dcity[2];
std::cin >> selection;
std::cout << dcity[selection-1];

此外,在将用户输入用作数组索引之前,您还应该进行一些错误检查:

if (!(std::cin >> selection) || selection < 1 || selection > sizeof(dcity) / sizeof(*dcity)) {
    std::cerr << "Input error!\n";
    return EXIT_FAILURE;
}
std::string departureLocation = dcity[selection - 1];

如果不需要数组元素的独立副本,也可以使用对std::string的引用:

std::string &departureLocation = dcity[selection - 1];

请注意,使用departureLocation对字符串的更改现在将反映在数组元素departureLocation的引用上。如果您不想允许更改,请使用const参考:

std::string const &departureLocation = dcity[selection - 1];

答案 2 :(得分:0)

您的代码几乎不需要修改。 1.通过使用逗号分隔数组值来初始化数组。注意,每个单独的元素应与声明的数组具有相同的类型。 2. C ++对类型匹配非常严格。我们只能分配相同类型的对象。在上面的代码中,字符串对象被分配给违反规则的字符变量。 C字符串是由空字符(\ 0)终止的字符数组。在C ++中,字符串更高级,它是一个具有非常有用的成员函数的对象。例如要获取字符串的长度,只需说obj.length()。我们需要字符数组,因为在字符串中可以有多个char元素。我们需要字符串对象的c-string进入字符数组。请参阅下面的修改后的代码。

#include <iostream>
#include <cstring>
#include <string>
using namespace std;    //std::  is not required in front of cout 
int main()
{
    int selection = 0;

    string dcity[] = { "Seattle", "Detroit" ,"Seattle", "Chicago", "Houston","Seattle" };
    cout << "Please choose a number from the list";
    cin >> selection;
    cout << dcity[selection-1] << endl;

    char departureLocation[dcity[selection-1].length()+1];
    strcpy(departureLocation,dcity[selection-1].c_str());
    cout << departureLocation;
   // cout << *c;
    return 0;
}

答案 3 :(得分:-1)

您可以将选择内容存储在std :: string中,因为char只能存储单个字符。还请注意访问数组的位置,不要超出范围(如果有人输入1000等),并且非程序员用户会以1开头的索引列表。您可以尝试以下代码:

#include <iostream>
#include <string>

int main()
{
    const auto Cities = { "Seattle", "Detroit", "Seattle", "Chicago", "Houston", "Seattle" };
    std::cout << "Please choose a number from the list (1-" << Cities.size() << "): ";

    int selection = 0;
    std::cin >> selection;
    if (selection < 1 || selection > Cities.size()) {
        std::cout << "\ninvalid selection!\n";
        return -1;
    }

    const std::string departureLocation = *(Cities.begin() + selection - 1);
    std::cout << "\nyou selected: " << departureLocation;

    return 0;
};

答案 4 :(得分:-1)

首先,编译器认为数组中只有一个元素,因为c ++中的数组在每个元素之间应该有逗号,并且每个字符串都必须用双引号引起来。第二个错误是您试图保存的数据将字符串键入数据类型为char的变量。

代码

#include<string>
#include<iostream>

using namespace std;
int main()
{

int selection=0;
string depaturelocation;
string dcity[]={"Seattle","Detroit","Seattle","Chicago","Houstan","Seattle"};
int size=sizeof(dcity)/sizeof(dcity[0]);
for(int i=0;i<size;i++)
{
   cout<<i+1<<" : "<<dcity[i]<<endl;
}
cout<<"please enter the destination no:";
cin>>selection;

for(int i=0;i<size;i++)
{
    if(selection-1==i)
    {
        depaturelocation=dcity[i];
    }
}
cout<<"destination:"<<depaturelocation;
return 0;
}