字符串的大写字符
Uppercase characters of a String
下面的代码应该使第一个字符大写,以及该字符的任何其他出现。
例如,如果输入是" complexity ",那么输出应该是" complexity "。但是输出却是" complicated "
#include <cctype>
#include <iostream>
#include <string>
int main()
{
std::string cadena;
std::cout << "Write a word: ";
std::cin >> word;
for (int i = 0; i < word.length(); i++)
{
if (word[0] == word[i])
word[i] = std::toupper(word[i]);
}
std::cout << word<< 'n';
}
我的代码有什么问题?
当您比较第二个c
时,第一个c
已经转换为C
。因此,Cadena[0] == Cadena[i]
为false
。
先存储第一个字符,然后与字符串中的字符进行比较。
char c = Cadena[0];
for (i = 0; i < Cadena.length(); i++)
{
if (c == Cadena[i])
Cadena[i] = toupper(Cadena[i]);
}
您甚至可以预先计算大写字符并在循环中使用它。
char c = Cadena[0];
char upperC = toupper(c);
for (i = 0; i < Cadena.length(); i++)
{
if (c == Cadena[i])
Cadena[i] = upperC;
}
因为您将第一个字符大写,所以第7个字符不再匹配。
不如这样修改你的循环。
char c = Cadena[0];
for (i = 0; i < Cadena.length(); i++)
{
if (Cadena[i] == c)
Cadena[i] = toupper(Cadena[i]);
}
在第一个循环Cadena[0] = 'C'
之后,所以当您再次遇到这个字母时,您执行测试:if ('C' == 'c')
,结果为false。
您应该首先将与第一个字符相同的字符大写(从i=1
开始循环),然后将for
循环后的第一个字符大写。
因为一旦在第一个字符上应用toupper
,它就变成了大写。然后,当它与相同但小写的字符进行比较时,比较返回false
。因为'C'和'C'不一样
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数