我试图在一些文本中读取大约100个字符长或更少,然后剥去空格,数字,特殊字符等等。我正在考虑如何去做这个但我想我一定忘记了关于cstrings等我所知道的大部分内容。我原本试图接受基本字符并将它们复制到一个新的字符串中但是1.我无法弄清楚如何编写它所以我的编译器并不讨厌我和2.我是我确定我不希望新的,剥离的字符串中有空格(我非常确定我的代码到目前为止会导致这种情况发生,如果它甚至有用的话)。
char * userText="";
char * justCharTxt;
cout << "Enter text: " << endl;
cin.getline(userText, STRING_SIZE);
for (int i = 0; i < strlen(userText); i++){
if (((userText[i] >= 'a') && (userText[i] <= 'z')) ||
((userText[i] >= 'A') && (userText[i] <= 'Z')))
*justCharTxt = userTxt[i];
}
关于这个问题的一些指导会很棒。谢谢!
答案 0 :(得分:4)
只需使用std::string
,无需摆弄char
数组或指针。
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string line;
getline(std::cin, line);
line.erase(
std::remove_if(line.begin(), line.end(),
[](char c) {return !isalpha(c, std::locale());}),
line.end()
);
std::cout << line << '\n';
}
答案 1 :(得分:1)
#include <iostream> using namespace std;
int main(){
int const STRING_SIZE=20;
char userText[STRING_SIZE*2]="";
char justCharTxt[STRING_SIZE]="";
char * txtPt = justCharTxt;
cout << "Enter text: " << endl;
cin.getline(userText, STRING_SIZE);
for (int i = 0; i < strlen(userText); i++){
if (((userText[i] >= 'a') && (userText[i] <= 'z')) ||
((userText[i] >= 'A') && (userText[i] <= 'Z')))
*(txtPt++)= userText[i];
}
cout << justCharTxt << endl;
return 0;
}
$ clang++ justit.cpp $ ./a.out Enter text: ab123 a aba
答案 2 :(得分:0)
你的char数组没有足够的内存,而且它们是const。 char userText [STRING_SIZE];