mode; // Conv-6ren">
gpt4 book ai didi

c++ - 访问 char* 的元素并检查值 C++

转载 作者:行者123 更新时间:2023-12-01 14:18:12 26 4
gpt4 key购买 nike

我知道您可以访问存储在字符数组中的单个字符:

example[] = 'HeLlo";
for (int i = 0; i < 6; i++)
{
if (example[i] >= 65 || example[i] <= 90)
{
example[i] += 32;
}
}

不幸的是,这对我的代码不起作用,因为我必须将它存储在字符指针中(我正在接受用户的输入)。如何检查 for 循环中 char 指针中的每个单独字符?这就是我现在所在的位置:

// Store input in mode
char* mode;
std::cin >> mode;


// Convert string to lowercase
for (int i = 0; i < std::strlen(mode); i++)
{
//if statement
}

最佳答案

您不能将用户输入存储到未初始化的指针。您需要分配一个足够空间的字符数组,然后读入该数组,例如:

#include <iostream>
#include <iomanip>
#include <cstring>

// Store input in mode
char mode[256] = {};
std::cin >> std::setw(256) >> mode;
or:
std::cin.get(mode, 256);

// Convert string to lowercase
for (size_t i = 0; i < std::strlen(mode); ++i)
{
if (mode[i] >= 'A' || mode[i] <= 'Z')
{
mode[i] += 32;
}
}

请注意,如果用户尝试输入超过 255 个字符,输入将被截断以适合数组。使用 std::string相反会避免这种情况,例如:

#include <iostream>
#include <string>

// Store input in mode
std::string mode;
std::cin >> mode;

// Convert string to lowercase
for (size_t i = 0; i < mode.size(); ++i)
{
if (mode[i] >= 'A' || mode[i] <= 'Z')
{
mode[i] += 32;
}
}

无论哪种方式,无论您使用char[] 数组还是std::string,您都可以使用std::transform()。在不使用手动循环的情况下将字符小写(参见 How to convert std::string to lower case? ),例如:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cctype>
#include <cstring>

// Store input in mode
char mode[256] = {};
std::cin >> std::setw(256) >> mode;
or:
std::cin.get(mode, 256);

// Convert array to lowercase
std::transform(mode, mode + std::strlen(mode), mode,
[](unsigned char ch){ return std::tolower(ch); }
);
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>

// Store input in mode
std::string mode;
std::cin >> mode;

// Convert string to lowercase
std::transform(mode.begin(), mode.end(), mode.begin(),
[](unsigned char ch){ return std::tolower(ch); }
);

关于c++ - 访问 char* 的元素并检查值 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63253822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com