注册 登录
编程论坛 C++教室

怎么转换大小写?

鼻涕龙 发布于 2011-02-01 22:07, 2562 次点击
程序代码:
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
void main()
{
    string str ;
    string words;
    cout<<"please input string"<<endl;
    std::getline(cin,str);

    cout <<"please input words"<<endl;
    cin>>words;
   
    size_t wordsLength = words.length();
    size_t pos ;
    for (size_t i = 0 ; i<str.length() ; i=pos + wordsLength)
    {
        pos = str.find(words,i);
        if (pos == string::npos)
        {
            break;
        }
        if (pos == 0)
        {
            str.replace(pos,wordsLength,wordsLength,'*');
        }
        size_t prepos  = pos -1;
        size_t lasrpos = pos+wordsLength+1;
      
        if ((prepos,1," ") == 0&&(lasrpos,1," "))
        {
            str.replace(pos,wordsLength,wordsLength,'*');
        }   
    }
    cout<<str<<endl;
}
目的就是在一个指定的字符串中替换制定单词为***。现在我想进行一下大小写转换。比如str=“What your name”,你要替换的单词输入时是words=what(这里的w是小写的),这样也能替换成功。或者更复杂点,比如str=“WHAT your name”,words=what(都是小写),这样也能替换WHAT为****。
在上面的基础上怎么修改?
8 回复
#2
pangding2011-02-02 00:19
有一篇文章介绍相关主题的,但内容涉及的比较深。如果有兴趣可以研究一下。
http://www.
#3
lucky5635912011-02-02 08:09
将字母的ASCII码加减32就可以
#4
鼻涕龙2011-02-02 10:19
如果用ASCII码,我怎么判断输入字符串的每个字符是大写还是小写?并且是不是要替换单词中的大写字符?我只想让输入的单词不分区大小写,其他的还是区分大写的。并且替换必须是整个单词 而不是包含关系。
如:str = “What yOUr Name Our”, words = “our”,结果就是“What yOUr Name ***”
#5
pangding2011-02-02 10:42
加减 32 还不如用 toupper tolower 这两个库函数的扩展性好。那篇文章里提了用这两个函数有什么要注意的。

其实有的编译器可能提供了 stricmp (或者 strcmpi) 来支持忽略大小写的比较字符串。但这两个不是标准函数。而且不知道是不是有什么危害,好像不是很提倡用。
#6
pangding2011-02-02 10:44
用 isupper 可以判断一个字符是不是大写。

你那就是各种情况比较复杂,编字符串的函数要的就是细心,没什么现成的方法。
#7
lintaoyn2011-02-02 10:55
如果字符串的内容全部都是英文字母的话,可以用这个char a,b; (a-b)%32
#8
迷失的木桶2011-02-06 13:49
观察Acii表可以发现 大写字母和小写字母相差32,在二进制来看32,在第六位上是1。因此使用位或就可以转换大写字母到小写字母。A|32=a,反过来 a|32=a。
#9
gsdgold2011-02-28 23:16
用 toupper和 tolower库函数
1