gpt4 book ai didi

c - 查找 argv[] 中的重复字符

转载 作者:行者123 更新时间:2023-11-30 17:32:58 28 4
gpt4 key购买 nike

我正在尝试扫描我的参数列表 argv[],并确定是否存在重复的字符。我尝试了一些方法,但似乎没有任何作用。我在 C 方面确实是个新手,所以请忍受我可怕的代码:

char unavailableLetters[26] = "";
int pos = 0;
for(i = 0; i < (argc-1); i++) {
int size = strlen(argv[i+1]);
for(j = 0; j < size; j++) {
char c = argv[i+1][j];

if(j == 0) {
unavailableLetters[pos] = c;
pos+=1;
} else {

char *s = strchr (unavailableLetters, c);
if(s == NULL) {
unavailableLetters[pos] = c;
pos += 1;
}
}
}
}

我这里的逻辑是解析所有参数,然后解析每个字符,首先检查它是否包含在 unavailableLetters 数组中,如果不包含 - 添加它,然后继续。但无论我尝试什么,它们要么都被添加,要么都不被添加。这可能不是最好的方法,但我没有主意。

  1. 列出项目

最佳答案

这是一个我仅简单测试过的解决方案。它仅适用于小写字母,并利用字母的 ascii 值是连续的这一事实(ascii a 是 97,这就是为什么我在分配索引时减去 97 并在打印字母时将其添加回来)

#include <iostream>
using namespace std;

int main (int argc, char *argv[])
{
int letters[26];

for (int i = 0; i < 26; i++) {
letters[i] = 0;
}

for (int i = 1; i < argc; i++) {
cout << "processing word: " << argv[i] << endl;
char *word = argv[i];
for (int j = 0; j < strlen(word); j++) {
cout << "\tprocessing letter: " << word[j] << endl;
letters[(int)word[j]-97]++;
}
}

cout << "Letters that appear only once: " << endl;
for (int i = 0; i < 26; i++) {
if (letters[i] == 1)
cout << (char) (i+97) << endl;
}

return 0;
}

关于c - 查找 argv[] 中的重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com