gpt4 book ai didi

c - 尝试输出此函数时我什么也没得到\空白

转载 作者:行者123 更新时间:2023-11-30 20:09:22 28 4
gpt4 key购买 nike

更新“他的问题是要求我只运行一次 str ,他们已经告诉我该函数只需要一个参数)” 我试图返回第一个不重复的字符,例如:“blazqnqbla”->第一个不重复的字符是“z”,因此函数需要返回z。现在该函数接受一个由字符构建的字符串 (str),该字符的 ASCII 值在 1-127 之间(包括 1 和 127)。问题是我得到的是空白输出。尝试输出代码时我什么也没得到

#include <stdio.h>
char first(char *str);
char first(char *str){
int L = 0;
int a[127] = {0};
for (int i=0; i<127; i++){
a[i] = i+1;
}
while (str[L] != '\0'){
for(int d=1; d<127; d++){
if (str[L]==(char)d){
if (a[L]>0){
a[L] = 0;
L++;
break;
}
else if (a[L]==0){
a[L] =- 1;
L++;
break;
}
else{
L++;
break;
}
}
}
}
for (int i=0; i<127; i++){
if(a[i]==0)
return (char)(i+1);
}
return '\0';
}

int main()
{
char s[] = "blazqnqbla";
char m = first(s);
printf("%c", m);
return 0;
}

最佳答案

很抱歉,您的功能太复杂了。甚至您也无法理解它并在应该是 a[d] 时使用 a[L]。这会返回一些东西,但只返回按字母顺序排列的第一个字母。所以在你的例子中它将是n

要使其正常工作,您需要:

  • 要记录的所有可能字符的数组,如果它们从未见过(例如 0)、一次(例如 > 0)或多次(例如 -1)。
  • 一个数组,记录遇到唯一字符的顺序
  • 当第一次遇到某个字符时,将其添加到数组中的下一个位置(按顺序),并将该排名存储在第一个数组中。

该函数的代码可以变为:

char first(char *str){
int a[127] = {0}; // rank+1 of the character in resul array
char resul[127] = {0}; // array of candidates for unique characters
int rank = 0; // current position in array of unique candidates
char c;
while((c = *str++) != '\0') { // scan the input string one char at a time
int i = (unsigned char) c; // convert to int to avoid warnings when
// using the char value as an index
if (c > 127) { // control char validity
fprintf(stderr, "Forbidden character %d\n", i);
return 1;
}
if (a[i] == 0) { // first time seen, store the character
resul[rank] = c;
a[i] = rank + 1; // and its rank
rank += 1;
}
else if (a[i] > 0) { // already seen, remove it
resul[a[i] -1] = 0;
a[i] = -1; // and never use it any longer
}
}
for(int i=0; i<127; i++){ // return first unique character
if(resul[i]!=0)
return resul[i];
}
return '\0';
}

在此代码中,输入字符串仅扫描一次,结果数组也是如此。所有其他访问都直接通过索引进行。

关于c - 尝试输出此函数时我什么也没得到\空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52943863/

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