gpt4 book ai didi

C 重复字符,一个字符一个字符

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:16 25 4
gpt4 key购买 nike

我试图找出一个接一个的两个字符是否是同一个字符。即,如果我有这个输入“The oldd woman”,我想在第二个 D“duplicate”旁边打印。这是我的代码,但我不知道如何进行此编码。这是我的代码:

void main()
{
char ch,ch2;
ch = getchar(); // getting the line of text
int i = 1;
ch2 = ch;

while (ch != '\n') // the loop will close if nothing entered
{
if (ch == ch2[&i]) {
printf("%c-duplicate", ch);
}
i++;
if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') { // checking for uppaercase vowel
printf("%c-upper case vowel", ch);
}
else if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') { // checking for lowecase vowel
printf("%c-lower case vowel", ch);
}
else if (ispunct(ch)) { // checking for punctuation
printf("%c-punctuation", ch);
}
else
putchar(ch);

printf("\n");
ch = getchar();
}
printf("\n");
}
}

我将字符设置为另一个变量,然后使用第一个 if 语句检查它们。该程序应逐个字符地运行。

最佳答案

下面是一个我相信是您想要的示例。 c 是当前正在读取的字符(注意:它是 int 类型)而 c1 是前一个读取的字符(初始化为 - 1 以确保它与第一个测试不匹配)。

虽然您可以比较 AE...,字符串库提供 strchr 可以轻松测试是否包含单个字符在一个更大的字符串中。

与其为每个duplicatevowel 等调用printf,不如使用sprintf 来构建一个字符串,其中包含适用于任何一个字符的所有条件。这样,您只需在每次迭代结束时调用 printf 一次(取决于您是打印全部还是仅打印符合条件的那些)。 s 用作保存每个字符的匹配信息的缓冲区,offset 只是先前写入s 的字符数。 (你应该检查以确保你没有超过 s 中可用的字符数(但这里不需要)

不清楚您是要打印输入字符串中的每个字符,还是只打印目前已匹配的字符。下面的代码只输出那些符合条件之一的字符(如果没有给出参数)。如果您想查看所有字符,请将任何值作为第一个参数传递给程序。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAXL 32

int main (int argc, char **argv) {

char *uvowel = "AEIOU", *lvowel = "aeiou";
int c, c1 = -1;

while ((c = getchar()) != '\n' && c != EOF) {
char s[MAXL] = ""; /* description buffer */
int offset = 0; /* offset */
if (c == c1) /* new == old */
offset = sprintf (s, " duplicate");
if (strchr (uvowel, c)) /* upper-case? */
sprintf (s + offset, " upper-case vowel");
else if (strchr (lvowel, c)) /* lower-case? */
sprintf (s + offset, " lower-case vowel");
else if (ispunct (c)) /* punctuation? */
sprintf (s + offset, " punctuation");
else if (argc > 1) /* if printing all */
sprintf (s + offset, " other");
if (*s) /* print c and s */
printf (" %c - %s\n", c, s);
c1 = c; /* save last char read */
}

return 0;
}

示例使用/输出

$ echo "The oldd woman" | ./bin/classdup
e - lower-case vowel
o - lower-case vowel
d - duplicate
o - lower-case vowel
a - lower-case vowel

将任何值作为第一个参数传递以打印所有字符:

$ echo "The oldd woman" | ./bin/classdup 1
T - other
h - other
e - lower-case vowel
- other
o - lower-case vowel
l - other
d - other
d - duplicate other
- other
w - other
o - lower-case vowel
m - other
a - lower-case vowel
n - other

重复元音

$ echo "womaan" | ./bin/classdup
o - lower-case vowel
a - lower-case vowel
a - duplicate lower-case vowel

检查一下,如果您有任何问题,请告诉我。有很多方法可以做到这一点,这只是一种似乎接近您的意图的方法。

(注意:您需要传递 -Wno-unused-parameter 编译器选项以消除有关 argv 未使用的警告,或者只是在某处进行 stub 测试在代码中,例如 if (argv[1]) {})

关于C 重复字符,一个字符一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40116073/

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