删除 char 数组中的字符

Posted

技术标签:

【中文标题】删除 char 数组中的字符【英文标题】:Deleting characters in a char array 【发布时间】:2021-06-20 16:35:22 【问题描述】:
#include <iostream>
#include <string.h>
#include <algorithm>
# define N 100
    
using namespace std;
    
int main()

    char A[N];
    unsigned char APP[256] = 0;
    cout << "Insert string" << endl;
    cin.getline(A,100);
    for(int i=0; i < strlen(A); ++i)
    
        unsigned char B = A[i];
        if(!APP[B])
        
            ++APP[B];
            cout << B;
        
    
    return 0;


/*char eliminazione(char,char)
 
*/`

我必须将for放在调用值B的“删除”函数中并在main中打印,你知道怎么做吗?


给定从键盘读取的字符串 A,用 C++ 语言创建一个函数,该函数通过删除所有出现多次的字符来计算从第一个字符串 B 获得的第二个字符串 B。因此,生成的字符串必须以相同的顺序包含第一个字符串的字符,但不能重复。

【问题讨论】:

这些是 C 字符串。 C++ 字符串将包含 &lt;string&gt; 并使用 std::string 类型声明。 请用英文提问。这个程序看起来像是打算按照字母到达的顺序输出每个唯一的输入字母一次。我不知道您的代码有什么问题,而且完全不清楚您所说的 “将 for 放在调用值 B 的删除函数中并在 main 中打印”的意思 我的代码有效,只是“删除”函数为空,练习要求我编写一个函数,在我的情况下,我在 for 中编写了过程,但我不能将其放入函数的形式 这个问题和昨天问的另一个问题很相似:Is there a way to delete a repeated character in a string using pointers in C? 【参考方案1】:

您只需将字符存储到一个新字符串中,并增加其索引,而不是 'cout',请参见下面的代码作为示例:

#include <iostream>
#include <string.h>
#include <algorithm>
# define N 100

using namespace std;

int main()

    unsigned char A[N]; // better to have same type for both A and B
    unsigned char B[N];
    memset(B, 0, sizeof(B));
    unsigned char APP[256] = 0;
    cout << "Insert string" << endl;
    cin.getline(A,100);
    int j = 0;
    for(int i=0; i < strlen(A); ++i)
    
        unsigned char c = A[i];
        if(!APP[c]++)
            B[j++] = c; //cout << c;
    
    cout << B << endl;
    return 0;

输出:

Insert string
lalalgdgdfsgwwyrtytr
lagdfswyrt

【讨论】:

以上是关于删除 char 数组中的字符的主要内容,如果未能解决你的问题,请参考以下文章

在 char 数组中删除特殊字符和字符串

从字符数组中删除字符

在C中操作动态分配的2D char数组

改变char数组中的字符

python ctypes中的多维char数组(字符串数组)

将字符串传递给 char 数组,然后在 C 中的位置 x 处修改 char 数组