删除/忽略除Cstring中的字符之外的所有内容

时间:2014-04-24 01:00:29

标签: c++ c-strings

我试图在一些文本中读取大约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];
}

关于这个问题的一些指导会很棒。谢谢!

3 个答案:

答案 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)

  1. 你需要初始化你的字符串,即保留一个缓冲区
  2. 你需要递增dest指针。
  3. #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];