• 9795阅读
  • 12回复

C++ string 转变大小写 [复制链接]

上一主题 下一主题
离线hanaper
 
只看楼主 倒序阅读 楼主  发表于: 2011-01-11
— 本帖被 XChinux 从 Qt for Windows 移动到本区(2011-01-25) —
#include <iostream>
#include <string.h> //貌似这个<string>不行呀
using namespace std;
/**
  *把字符串变为小写
  */
void to_upper(){
    string tempstr = "upper";
    char* tempchar = strupr((char*)tempstr.c_str());
    cout << tempchar << endl;
}
/**
  *把字符串变为大写
  */
void to_lower(){
    string tempstr = "LOWER";
    char* tempchar = strlwr((char*)tempstr.c_str());
    cout << tempchar << endl;
}
int main(int argc, char** argv) {
    to_upper();
    to_lower();
    return 0;
}
离线梅克斯
只看该作者 1楼 发表于: 2011-01-13
QString有toupper()跟tolower()函数.....
离线hanaper
只看该作者 2楼 发表于: 2011-01-22
回 1楼(梅克斯) 的帖子
我这里说的是C++,没有提及到QT
离线梅克斯
只看该作者 3楼 发表于: 2011-01-25
这样子可能就要你自己写个函数实现了
离线XChinux

只看该作者 4楼 发表于: 2011-01-25
C基础库中有字符大小写转换的函数吧。依此可以方便的写出字符串大小写转换函数。
C++中有strlwr(), strupr(),STL中有transform(),boost中有to_lower(),to_upper()
[ 此帖被XChinux在2011-01-25 11:44重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线paranoid
只看该作者 5楼 发表于: 2011-01-25
strlwr(), strupr()不是标准C的函数,是MS的实现.
标准C中的函数是toupper, tolower
离线XChinux

只看该作者 6楼 发表于: 2011-01-26
谢谢楼上
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线hanaper
只看该作者 7楼 发表于: 2011-01-27
回 5楼(paranoid) 的帖子
标准C++写的
#include <string>
#include <iostream>
#include <ctype.h>

using std::cout;
using std::endl;
using std::string;

string to_upper(string text) {
    string tempstr;
    int len = text.length();
    for (int i=0; i<len; i++) {
       char textch = text.at(i);
       int ascii = toupper((int)textch);
       char tempch = (char)ascii;
       tempstr.append(1, tempch);
    }
    return tempstr;
}

int main() {
    string up = to_upper("小写!@#^&*()_+$%0123456789toupper");
    cout << up << endl;
    return 0;
}

结果为
小写!@#^&*()_+$%0123456789TOUPPER
离线hanaper
只看该作者 8楼 发表于: 2011-01-27
这里有个更好的。不过改变了原有的字符串了
   string s("hello");
    transform(s.begin(), s.end(), s.begin(), toupper);
    cout << s << endl;
离线paranoid
只看该作者 9楼 发表于: 2011-01-27
不想改变s的话,调整transform的第三个参数就好了:
string out(s.length(),0);
transform(s.begin(), s.end(), out.begin(), toupper);
离线ethan
只看该作者 10楼 发表于: 2011-01-28
强大的!
只看该作者 11楼 发表于: 2011-02-06
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string stringCase(string ss, char sss);

int main()
{
    string str_1;
    char s;
    cout << "请输入一条不含空格的字符串 和  大小写说明符" << endl
         << "大写输入 'N'" << endl
         << "小写输入 'Y'" << endl;
    cin >> str_1 >> s;
    cout << stringCase(str_1,s) << endl;
    return 0;
}

string stringCase(string ss, char sss)
{
  string newStr;
  if((sss == 'N') || (sss == 'n'))
  {
      for(string::size_type i = 0; i != ss.size(); ++i)
      {
          newStr += toupper(ss);
      }
  }
  else if((sss == 'Y') || (sss == 'y'))
  {
      for(string::size_type i = 0; i != ss.size(); ++i)
      {
          newStr += tolower(ss);
      }
  }
  return newStr;
}
离线shaoxie1986

只看该作者 12楼 发表于: 2011-02-10
有个直接的办法,就是把ASCII码加上大小写之间的差
快速回复
限100 字节
 
上一个 下一个