不使用STL的c ++中的tolower()

时间:2019-03-19 21:05:05

标签: c++ stl c++14

我想在不使用STL的情况下在c ++中编写tolower()的函数。 当我给类似“ Hello”的小输入时,我的代码得到了正确的输出,但是当我给大段的输入加上了标点符号时,就出现了错误。任何人都可以帮助修复并帮助理解我为什么会出错?

我的代码:

{ a: b if b else None for a,b in (i.split(':') for i in t) }

2 个答案:

答案 0 :(得分:1)

接近代码并更正错误的定义是:

#include <iostream>
#include <string>

using namespace std;

int main()
{ 
  string str = "Mymommaalwayssaid,\"Lifewaslikeaboxofchocolates.Youneverknowwhatyou'regonnaget.";
  string lower = str;

  for (size_t i = 0; i < lower.length(); ++i) // can also use an iterator
  {
    char c = lower[i];

    if ((c >= 'A') && (c <= 'Z'))
      lower[i] += ('a' - 'A');
  }

  cout << lower <<endl;

  return 0;
}

编译与执行

pi@raspberrypi:/tmp $ g++ -pedantic -Wextra t.cc
pi@raspberrypi:/tmp $ ./a.out
mymommaalwayssaid,"lifewaslikeaboxofchocolates.youneverknowwhatyou'regonnaget.

但是我不明白,因为您在不使用STL的情况下说 而您在使用 std :: string

没有 std :: string iostream 可以替换为 stdio.h

#include <iostream>

using namespace std;

int main()
{ 
  const char str[] = "Mymommaalwayssaid,\"Lifewaslikeaboxofchocolates.Youneverknowwhatyou'regonnaget.";
  char lower[sizeof(str) + 1]; // if str content unknown so sizeof unknown => strlen and new/malloc etc

  for (size_t i = 0 ; i != sizeof(str); ++i)
  {
    char c = str[i];

    if ((c >= 'A') && (c <= 'Z'))
      c += ('a' - 'A');

    lower[i] = c;
  }

  lower[sizeof(str)] = 0;

  cout << lower <<endl;

  return 0;
}

编译与执行

pi@raspberrypi:/tmp $ g++ -pedantic -Wextra t.cc
pi@raspberrypi:/tmp $ ./a.out
mymommaalwayssaid,"lifewaslikeaboxofchocolates.youneverknowwhatyou'regonnaget.

答案 1 :(得分:0)

嗯,这个问题有几个令人困惑的地方。首先,该问题要求提供tolower()的示例,但是代码似乎想要创建一个名为UP的字符串。

我继续创建了一个string_to_lower()函数。我不想使用与tolower(char * str)相同的名称,尽管那样可以。

#include <iostream>
#include <string>

std::string string_to_lower(std::string str) {
  const uint diff = 'a' - 'A';  // create a constant from the ascii chars

  std::string lower; // return string.  Could be done with an inline reference.
  lower.reserve(str.length());

  for (int i = 0; i < str.size(); i++) { // Use a ternary to set each char
    lower += (str[i] >= 'A' && str[i] <= 'Z') ? str[i] + diff : str[i];
  }

  return lower;
}

int main()
{
  std::string str = {"My momma always said, \"Life "
                     "is like a box of chocolates."
                     "You never know what you're gonna get.\""};

  std::string lower = string_to_lower(str);
  std::cout << lower << std::endl;
  return 0;
}