我有一个问题,其中字符串的所有小写字符都应转换为大写字符。但根据问题,代码中的某些行不应更改。我写了下面的代码。
#include <iostream>
#include <string>
#include <stdio.h>
#include <ctype.h>
using namespace std;
class StringOps {
public:
void stringToUpper(string &s) //This line should not be changed
{
char c;
int i=0;
while (s[i])
{
c=s[i];
putchar (toupper(c));
i++;
}
}
};
int main(void)
{
string str ="Hello World";
StringOps obj;
obj.stringToUpper(str);
cout << str; //This line should not be changed
return 0;
}
我得到的输出为:
HELLO WORLDHello World
但所需的输出是:
HELLO WORLD HELLO WORLD
如何制作
cout<<str;
main()中的语句用于打印函数中计算的结果:
void stringToUpper(string &s)
答案 0 :(得分:0)
仅针对ASCII字符的下半部分的解决方案。
class StringOps {
public:
void stringToUpper(string& s) //This line should not be changed
{
for (size_t i = 0; i < s.size(); ++i) {
if (s[i] > 96 && s[i] < 123)
s[i] -= 32;
}
}
};
如果您关心ASCII表的较高部分:
class StringOps {
public:
void stringToUpper(string& s) //This line should not be changed
{
for (size_t i = 0; i < s.size(); ++i) {
s[i] = toupper(s[i]);
}
}
};
如果你有一些多字节编码,比如UTF-8,你需要一些库。
答案 1 :(得分:0)
cout&lt;&lt;海峡; //不应更改此行
这意味着您必须更改str
。
void stringToUpper(string&amp; s)//不应更改此行
好消息是,您的方法将s
作为参考。
在您的代码中,您正在执行c=s[i];
,您应该在字符串s[i] = c
中重新分配字符
答案 2 :(得分:0)
您只是打印字符串,并将每个字符设为上部字符,但传递给函数(通过引用)“s”的字符串不会更改。
void stringToUpper(string &s)
可以添加一行以使s在void stringToUpper(string&amp; s)中更改
s[i] = toupper(c);
代码看起来
c=s[i];
s[i] = toupper(c);
putchar (toupper(c));
i++;
输出
HELLO WORLDHELLO WORLD