根据函数约束修改字符串文字C ++的内容

时间:2014-03-26 16:23:02

标签: c++ string

我需要将字符串作为参数传递给函数Lower(char *),将给定的字符串文字转换为小写字母。该函数只能返回int。 在main()中,我需要以某种方式访问​​转换后的字符串。 目前我在Lower()函数中输入tmp字符串的地址,然后尝试取消引用该地址。 这是代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int Lower(char* str)
{

char tmp[100];
for(int i=0;i<=strlen(str);i++)
{
   if(isupper(*(str+i)))
     *(tmp+i) = *(str+i)+32; 
   else
     *(tmp+i) = *(str+i);
}
return int(tmp);
}

int main()
{
   char* str = "gOAt";
   char *rc=(char *)Lower(str);
   printf(rc);
   return 0;
}

同样,函数原型不能改变,即原型必须是int Lower(char *)。但是,必须在main()函数中以某种方式访问​​“goat”。怎么办呢?

1 个答案:

答案 0 :(得分:0)

发布的代码有很多问题。我的看法是从函数返回的int是状态代码,当它是1时,它表示转换为小写成功,否则为0。这是一个执行转换的工作程序:

#include <iostream>
using namespace std;

int lower(char* str)
{
    int hasLower = 0;

    while(*str)
    {
        if (*str >= 'A' && *str <= 'Z')
        {
            *str = (*str - 'A') + 'a';
            hasLower = 1;
        }
        str++;
    }

    return hasLower;
}

int main(int argc, char** argv) 
{
    if (argc != 2) { cout << "No input! Exiting..." << endl; return 1; }

    char* input = argv[1];
    if (lower(input))
    {
        cout << "Lower case: " << input << endl;
    }
    else
    {
        cout << input << " isn't a valid string for lower-case conversion" << endl;
    }
    return 0;
}