子str为char的c++无数组

substr to char c++ no array

本文关键字:c++ 数组 char str      更新时间:2023-10-16

就像标题所说的,我试图将子字符串转换为字符。最终,我要做的是告诉substr是大写字母还是小写字母,我得到的提示是,最好的方法是使用ascii值。这是我的

for(int i = 0; i<length; i++){
  char a = a.substr(i,1);
 if(a>=65&&a<=90){
   uppercase++;
 }
}

我在这里得到这个错误:

string_info.cpp:34:16: error: member reference base type 'char' is not a
      structure or union
     char a = a.substr(i,1);

我知道它不工作,因为substr输出一个字符串而不是一个字符,但我不明白的是如何得到这些ascii值的控制。有人有什么想法吗?

为什么一定要使用substr呢?你的代码基本上就是一个字符一个字符地遍历字符串。您可以使用[]at

for (int i=0;i<a.length();i++) {
    char c = a[i];
    /*
        Can also use
        char c = a.at(i);
     */
    if (c >= 'A' && c <= 'Z') {
        uppercase++;
    }
}

还请注意您的char a = a.substr(i, 1);代码是错误的,因为substr返回string,您也重新声明a

与其使用substr, at或操作符[],我建议使用基于范围的for循环:

  std::string a = "Test";
  int uppercase = 0;
  for(const auto& c : a)
  {
    if (c >= 'A' && c <= 'Z')
      uppercase++;
  }

与其使用ASCII值,不如使用isupper函数:

  std::string a = "Test";
  int uppercase = 0;
  for (const auto& c : a)
  {
    if(isupper(c))
      uppercase++;
  }