带大写数组结果的输出空格

Output spaces with uppercase array results

代码应该接受数组大小和一组字符的输入,并将它们输出为大写字母。我的问题是,当我输入像 "i love chocolate" 这样的句子时,它会返回 ILOVECHOCOLATE。问题是我如何获取输入?还是我丢失了其他地方的空间?

#include <iostream>
#include <cstring> 
#include <cctype>

using namespace std;
void readString(char*, int);
void changeToUpper(char*, int);
void displayString(char*, int);
int main()
{
    int arraySize;
    char* characterArray;

    cout << "Enter the size of dynamic array: ";
    cin >> arraySize;
    characterArray = new char[arraySize];
    readString(characterArray, arraySize);
    changeToUpper(characterArray, arraySize);
    displayString(characterArray, arraySize);
    delete[] characterArray;
    system("pause");


    return 0;
}
void readString(char* characterArray, int arraySize){
    cout << "Enter a string of " << arraySize << " characters to be changed:";
    for(int i= 0; i < arraySize; i++){
        cin >> characterArray[i];
    }
}
void changeToUpper(char* characterArray, int arraySize){
    for(int i = 0; i < arraySize; i++)
        characterArray[i] = toupper(characterArray[i]);
}
void displayString(char* characterArray, int arraySize){
cout << "\nYour string Upper Cased: ";
for(int i = 0; i < arraySize; i++)
    cout << characterArray[i];
    cout << endl;

}

您可以使用 <csdio> 头文件的 fgets 功能。

这个函数的参数是char* and length including [=14=] and FILE*.

这个功能只需要\n个字符就完成了。您可以包含 whitespace 个字符。

但是当你输入数组大小时,最后一个字符是\n。所以你必须清除那个字符。

getc 函数从 FILE stream 中读取 1 个字符。通过这样做,您可以从数组大小的输入中跳过 \n happend。

因此更改了这些代码。

#include <cstdio>    
cin >> arraySize; getc(stdin);

void readString(char* characterArray, int arraySize){
    cout << "Enter a string of " << arraySize << " characters to be changed:";
    fgets(characterArray, arraySize, stdin);
}