在 C++ 中用大写字符替换整个字符串
Replacing entire string with uppercase Character in C++
我正在寻求有关替换整个字符串中的字符的帮助。我正在寻找用大写字母 X 替换字符串中的所有字符。我尝试实现循环范围,但是 Microsoft Visual C++ 2010 似乎不支持它,因为我遇到了错误。所以我决定使用标准的 for
循环,我还尝试使用我认为将内置在字符串函数库中的替换字符串函数。但是,我收到错误。我将不胜感激任何帮助。谢谢
#include<iostream>
#include<string>
using namespace std;
int main(){
const char ch = 'X';
char Char1;
string str = {"This is my Book"};
string::size_type n;
for(n = 0; n < str.size(); ++n){
if(str[n] == Char1)
str[n] = ch;
cout<< str << endl;
return 0;
}
据我了解,您想用 X 替换每个字符。
字符串完全由字符组成,因此您的问题没有多大意义。我假设你的意思是你想用 X 替换所有字母(小写和大写)。
你的for循环可以改写成这样:
for (int n = 0; n < str.size(); ++
if (((str[n] < 91) && (str[n] > 64)) || ((str[n] < 123) && (str[n] > 96)))
str[n] = 'X';
与91、64、123、96的比较对应大小写字母ASCII值的上下限。
PS:如果你不是别的意思,请告诉我,我会相应地修改答案。
一般来说,我收到错误 描述性不强,并且您的代码缩进得非常厉害。然而,错误在这里:
string str = {"This is my Book"};
你的意思可能是:
string str {"This is my Book"};
前者创建一个初始化列表并尝试将其分配给str
;后者只是用给定的参数构造一个字符串。
然而,VS 2010 不支持初始化列表,所以你需要这样做:
string str("This is my Book");
此外,您的 for 循环中有一个多余的左大括号,它与右大括号永远不匹配。
另一个问题:Char1
从未被初始化,所以它可以容纳任何东西。它在当前上下文中似乎也毫无用处。
您的 for
循环也最好使用 STL 迭代器来完成:
for (string::iterator it = str.begin(); it != str.end(); ++it)
*it = ch;
您的固定密码:
#include <iostream>
#include <string>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
for (string::iterator it = str.begin(); it != str.end(); ++it)
// for each character in str, set it to ch
*it = ch;
cout << str << endl;
return 0;
}
如果您只想替换字母,请执行以下操作:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
for (string::iterator it = str.begin(); it != str.end(); ++it)
if (isalpha(*it)) // make sure we're replacing a letter
*it = ch;
cout << str << endl;
return 0;
}
但是,由于您只是填充一个字符串,所以有更好的方法:
#include <iostream>
#include <string>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
str = string(str.size(), 'X');
// This is a version of the std::string constructor that takes
// a number (N) and a character and duplicates the character N
// times.
cout << str << endl;
return 0;
}
或者,更好的是,使用 lambda 和 for_each:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
// for_each takes an iterator to the start and end of any STL
// container. It then calls the given function on each element in
// the iterator. This lambda replaces the character with ch.
for_each(str.begin(), str.end(), [](char& c) { c = ch; });
cout << str << endl;
return 0;
}
我正在寻求有关替换整个字符串中的字符的帮助。我正在寻找用大写字母 X 替换字符串中的所有字符。我尝试实现循环范围,但是 Microsoft Visual C++ 2010 似乎不支持它,因为我遇到了错误。所以我决定使用标准的 for
循环,我还尝试使用我认为将内置在字符串函数库中的替换字符串函数。但是,我收到错误。我将不胜感激任何帮助。谢谢
#include<iostream>
#include<string>
using namespace std;
int main(){
const char ch = 'X';
char Char1;
string str = {"This is my Book"};
string::size_type n;
for(n = 0; n < str.size(); ++n){
if(str[n] == Char1)
str[n] = ch;
cout<< str << endl;
return 0;
}
据我了解,您想用 X 替换每个字符。 字符串完全由字符组成,因此您的问题没有多大意义。我假设你的意思是你想用 X 替换所有字母(小写和大写)。
你的for循环可以改写成这样:
for (int n = 0; n < str.size(); ++
if (((str[n] < 91) && (str[n] > 64)) || ((str[n] < 123) && (str[n] > 96)))
str[n] = 'X';
与91、64、123、96的比较对应大小写字母ASCII值的上下限。
PS:如果你不是别的意思,请告诉我,我会相应地修改答案。
一般来说,我收到错误 描述性不强,并且您的代码缩进得非常厉害。然而,错误在这里:
string str = {"This is my Book"};
你的意思可能是:
string str {"This is my Book"};
前者创建一个初始化列表并尝试将其分配给str
;后者只是用给定的参数构造一个字符串。
然而,VS 2010 不支持初始化列表,所以你需要这样做:
string str("This is my Book");
此外,您的 for 循环中有一个多余的左大括号,它与右大括号永远不匹配。
另一个问题:Char1
从未被初始化,所以它可以容纳任何东西。它在当前上下文中似乎也毫无用处。
您的 for
循环也最好使用 STL 迭代器来完成:
for (string::iterator it = str.begin(); it != str.end(); ++it)
*it = ch;
您的固定密码:
#include <iostream>
#include <string>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
for (string::iterator it = str.begin(); it != str.end(); ++it)
// for each character in str, set it to ch
*it = ch;
cout << str << endl;
return 0;
}
如果您只想替换字母,请执行以下操作:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
for (string::iterator it = str.begin(); it != str.end(); ++it)
if (isalpha(*it)) // make sure we're replacing a letter
*it = ch;
cout << str << endl;
return 0;
}
但是,由于您只是填充一个字符串,所以有更好的方法:
#include <iostream>
#include <string>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
str = string(str.size(), 'X');
// This is a version of the std::string constructor that takes
// a number (N) and a character and duplicates the character N
// times.
cout << str << endl;
return 0;
}
或者,更好的是,使用 lambda 和 for_each:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
const char ch = 'X';
string str("This is my Book");
// for_each takes an iterator to the start and end of any STL
// container. It then calls the given function on each element in
// the iterator. This lambda replaces the character with ch.
for_each(str.begin(), str.end(), [](char& c) { c = ch; });
cout << str << endl;
return 0;
}