如何将用户输入传递给char []

时间:2019-06-23 17:35:46

标签: c++

我遵循一个示例来反转一个很棒的字符串,但我想使用cin输入该字符串,而不是将值硬编码为char text []。能做到吗?我已经在Google上搜索并找到了各种文章,但到目前为止还无法使它起作用。 我尝试使用c_str()和strcpy(哪个编译器不喜欢我使用)

//Create a char array with text you want to reverse.
char text[] = "hello";


//Get the number of chars in the array, there will be an extra 0 so you need to take 1 away.
int nChars = sizeof(text) - 1;
cout << nChars << endl;

//Make pointer start equal to the text array.
char *pStart = text;

//Make pointer end equal to the text array + number of characters minus 1.
//char *pEnd = text + nChars - 1;
char *pEnd = text + nChars - 1;
cout << pEnd << endl;

//While the start of the pointer is less than the end pointer.
cout << pStart << " " << pEnd << endl;
while (pStart < pEnd) {

    //Save the character at the location of the start pointer.
    char save = *pStart;

    //Make the start pointer equal to the last pointer.
    *pStart = *pEnd;

    //Write the saved character to the end pointer.
    *pEnd = save;

    //Move the start pointer up 1 slot.
    pStart++;
    //Move the end pointer back 1 slot.
    pEnd--;


}


//output text in reverse.
cout << text << endl;

return 0;

}

3 个答案:

答案 0 :(得分:1)

  

但是我想使用cin输入字符串,而不是将值硬编码为char text[]

使用c std::string而不是原始char数组很容易做到:

 std::string text;

 // ...

 std::getline(cin,text);

其余的代码可以在const char*返回的text.c_str()指针上工作,或者甚至更好地使用字符串的rbegin()rend()迭代器来获得尊敬的副本:

std::copy(text::rbegin(), text.rend(),std::begin(text));

从c ++ 17开始,您还可以使用std::reverse()函数来做到这一点:

std::reverse(text.begin(), text.end());

答案 1 :(得分:0)

如果您不喜欢std::string,则有很多方法可以读取字符数组。

注意:读入字符数组可能会使数组溢出。另外,数组中必须有一个NUL终止符,才能将该数组视为C样式的字符串。

使用cin

您可以使用cin来读取字符数组。

char my_array[8];
std::cin >> my_array;

此技术将跳过初始空白,然后将字符读入my_array,直到遇到空白或输入终止。

注意:如果输入大于数组大小,则输入将继续写入数组末尾,从而导致未定义的行为。制作大量数组可能会浪费内存。

使用read

您可以使用read方法读取固定数量的字符:
静态const unsigned int LIMIT = 16;

char your_array[LIMIT];
std::cin.read(your_array, LIMIT);

使用上面的代码,您需要将NUL终止符放置在适当的位置:

size_t count = std::cin.gcount();
if (count == LIMIT)
{
    --count;
}
your_array[count] = '\0';

使用std::string

首选项是使用std::string

std::string input_text;
std::cin >> input_text;  // Read space separated text, i.e. a *word*.
std::getline(std::cin, input_text);  // Read a line of text.  

答案 2 :(得分:-1)

int ReverseStringProg() {

    string text;
    cout << "Please enter a value that you would like to reverse: " << flush;
    cin >> text;
    std::reverse(text.begin(), text.end());
    cout << text;
    return 0;   
}