【问题标题】:is there a function to identify what letter is the char in a string C是否有一个函数可以识别字符串 C 中的字符是什么字母
【发布时间】:2015-03-17 11:59:56
【问题描述】:

我知道 string.h 有 isalpha(_) 函数,但我只是想知道是否有一个函数可以让我们知道字符串中的特定字符是什么字母。我想用另一个特定的字符来改变它,比如所有 A 都将变为“#--”,所有 K 将变为“--#”,所有其他字母都有其自身的差异(这也可能吗?制作一个子字符串?在字符串中?还是我做错了..)

char string[100];

int i;

char A*[]={"#--","--#"};

gets(string);

for(i=0, i<100, i++) {
    if(isalpha(string[i])) {
        string[i]=A[1];
    }
}

但我不知道一个函数可以告诉我那是什么字母..我知道它是一个字母..我知道它是什么字母..但是计算机/编译器不知道它是什么字母,它只要知道它是否是一封信..

我们也可以使用strcmp(_)吗?作为备选?就像我们再制作一个 char 一样,我们只是把整个字母按顺序排列?

char alpha[26]={'a','b','c','d','e','f','g','h','i','j','k','l'*you get the point* };

char string[100];

int i;

char A*[]={"#--","--#"};

gets(string);

for(i=0, i<100, i++) {
    if(strcmp(alpha,string[i])==0) {
        string[i]=A[1];
    }
}

或者我应该使用 ASCII 表吗?因为我们已经测试过了

printf("%d , %d \n", 'A', 'a');
printf("%c, %c \n", 65, 97);

这个输出:

65 , 97
A , a 

这里最好的做法是什么?

【问题讨论】:

  • aer 你在寻找一个字符在字符串中的位置吗?如果是这样,请使用tutorialspoint.com/ansi_c/c_strchr.htm
  • 如果您要在 ASCII 表中查找字符的值(即 A = 65,a = 97),请使用 ord() 函数
  • @Mawg: ord() 不是标准库 C 函数。你能告诉它来自哪里以及如何使用它吗?考虑到 C 的原生“字符串是字符数组”实现,为什么还需要一个函数?
  • 谢谢.. strchr 功能.. 我确实说过我想识别用户输入的字母.. 哦,好吧
  • 哎呀,Ord() 是 Pascal ;-( 实际上你可以直接施法。见 stackoverflow.com/questions/845710/…

标签: c string char


【解决方案1】:

char c = 'A'char c = 65完全是一回事。

如果您想比较 2 个字符,只需使用 == 运算符:

char c = 'A';
char c2 = 65;

if (c == c2)
  puts("It is equal!");

如果你想“抽象”条件,你可以从这里创建一些函数/宏:

#define IS_LETTER(X, L)   (X == L)
#define IS_LETTER_A(X)    (IS_LETTER(X, 'A'))

char c = 'A';
if (IS_LETTER_A(c)) // or IS_LETTER(c, 'A')
   puts("It's an A");

【讨论】:

    【解决方案2】:

    为此,为自己创建一个包含替换字符的数组。然后,通过要编码的字符访问此数组。通过假设 char 是 ASCII 字符来完成访问,只需从 ASCII 表中减去偏移量(例如,如果让它从 A 开始,则为 65)并访问您的数组。例如

    char *code = [ '1', '2' ];
    
    char input = 'B'; // 66 in ASCII
    char output = code[input - 65];
    

    编辑:当然你也可以做同样的事情,例如char 编码为 char*(例如字符串)。只需使用字符串数组而不是字符数组即可。

    【讨论】:

    • 请注意,最后一行比 OP 的幼稚 string[i]=A[1]; 需要更多的工作(但我可以看到“留给读者作为练习”的正确理由)。
    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2012-03-13
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多