windows 为什么这适用于向量而不适用于字符串?

q9yhzks0  于 2023-05-01  发布在  Windows
关注(0)|答案(3)|浏览(180)

为什么在这段代码中可以工作

#include "iostream"
#include "vector"
#include "string.h"
using namespace std;
int main()
{
    vector<string> myvect;
    string temp;
    string temp2;
    for (int i = 0; i < 2; i++)
    {
        cin >> temp;
        myvect.push_back(temp);
    }
    for (int i = 0; i < 2; i++)
    {
        temp2 = myvect[i];
        cout << temp2 << endl;
    }
}

当执行temp2 = myvect[i]时,它放入整个字符串。但当我执行temp2 = temp[i]时,它只放入字符串的一个字符。
两者不应该给予相同的结果。不是指向字符串第一个元素的字符串。

bfhwhh0e

bfhwhh0e1#

你有两个不同的容器。一个是std::string,它存储char*或一个字符数组,另一个是std::vector,在您的情况下,它存储一个std::string数组。

char chArr[5];
int iArr[5];
std::string string;     // basically a char* with extra data and functions
std::vector<std::string> vector;

chArr[0];   // returns first char in array
iArr[0];    // returns first int in array
string[0];  // returns first char in string
vector[0];  // retunrs first element in vector, in this case a string
0vvn1miw

0vvn1miw2#

执行temp2 = myvect[i],它将整个字符串放入
temp2是一个字符串,而myvect是一个包含字符串元素的向量。当你用方括号索引myvect时,你得到的是myvect的元素,i。e.串。
do temp2 = temp[i]它只输入字符串的一个字符
temp是一个字符串,所以当你用方括号索引它时,你会得到它的元素类型i。字符(字符串是C++中一种特殊的向量,它的元素是字符)。
总之,您可能会混淆stringvector<string>的概念。当然,它们都是向量,但其中一个的元素是字符串,另一个的元素是字符。
希望对你有帮助。

g6ll5ycj

g6ll5ycj3#

当您这样做时:

cin >> temp;

它将用用户输入填充temp(这里有更多内容),这意味着temp的内容将被替换为新的字符串(在您的情况下是3次)。
然后,如果您这样做:

for (int i = 0; i < 2; i++)
{
    temp2 = temp[i];
    cout << temp2 << endl;
}

这将读取最后一个输入的前三个字符(这也是不安全的,因为输入字符串可以更小)。
例如,要连接前3个用户输入:

string temp2;
    for (int i = 0; i < 2; ++i)
    {
        string temp;
        cin >> temp;
        temp2 += temp;
    }
    cout << temp2 << endl;

我不太明白你的意图,如果你只想考虑单个字符,你可能想使用char而不是string

相关问题