0

我的教授要求我们在不调用图书馆的情况下确定 userString 中元音的数量。

我在 for 循环中使用 '\0' 来确定用户输入的字符串何时结束,因为我不知道他们将为字符串输入的确切大小。我是初学者,所以请不要给我复杂的答案!谢谢。

我有 for(int i = 0; userString[i] != '\0'; i++) 但程序也将空格键视为空字符,所以我在输出中遇到问题,如果我有空格推荐行将其视为空值并终止程序

在 2 个不同输出的图片处循环以供参考。正如您在输出 1中看到的那样, 当我有“MianJalal”时,我在终端中得到 9,但对于 输出 2 ,当我有“Mian Jalal”(带空格)时,它会将空格视为空并给我 4,我知道'\0' 是 c++ 中特殊字符中的空格,但它也是空的,我怎么能告诉程序我的意思是空而不是空格?

这是我的代码,

#include <iostream>
using namespace std;

int main()
{
    int numOfVowels = 0;
    int length = 0;

    char userString[50]; // The string the user will input
    cout << "Enter a sentence to find out how many vowels are in the sentence" << endl;
    cin >> userString;

    for(int i = 0; userString[i] != '\0'; i++) // '\0' means null in a string in c++; if a user doesn't use a index in a char string
    {                                         // the program will know it's a null in syntax '\0'

    if(userString[i] == 'A' or userString [i] == 'a' or userString[i] == 'i')
    {
        numOfVowels++;
    }
    length++;
    }

    cout << length << endl;

return 0;
}
4

1 回答 1

0

问题是运算符 >> 使用空格作为分隔符。因此,当读取 userString 时,它会停在第一个空格处。为避免这种情况,一种方法可能是使用istream::getline (char* s, streamsize n)函数,该函数读取整行直到 '\n' 字符或提供的大小限制。

#include <iostream>
using namespace std;

int main()
{
    int numOfVowels = 0;
    int length = 0;

    char userString[50]; // The string the user will input
    cout << "Enter a sentence to find out how many vowels are in the sentence" << endl;
    cin.getline(userString, sizeof(userString));

    for(int i = 0; userString[i] != '\0'; i++) // '\0' means null in a string in c++; if a user doesn't use a index in a char string
    {                                         // the program will know it's a null in syntax '\0'

        if(userString[i] == 'A' or userString [i] == 'a' or userString[i] == 'i')
        {
            numOfVowels++;
        }
        length++;
    }

    cout << length << endl;

    return 0;
}
于 2020-11-29T09:25:29.870 回答