【发布时间】:2021-07-14 23:29:18
【问题描述】:
我得到的提示是:首字母缩略词是由一组短语中单词的首字母组成的单词。编写一个程序,其输入是一个短语,其输出是输入的首字母缩写词。如果单词以小写字母开头,请不要在首字母缩写词中包含该字母。假设输入中至少有一个大写字母。
另外,我使用了以下函数:void CreateAcronym(char userPhrase[], char userAcronym[])。
我的代码问题是只有第一个字母被保存到 userAcronym 变量中。 例如,当字符串是电气和电子工程师协会时。我得到的输出只是 I。我需要更改什么才能获得剩余的字母?
感谢您的帮助。
到目前为止我的代码是:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 60
void CreateAcronym(char userPhrase[], char userAcronym[]){
int i;
int j=0;
for(i = 0; i < strlen(userPhrase); ++i){
if(isupper(userPhrase[i])){
userAcronym[j]=userPhrase[i];
}
j++;
}
printf("%s", userAcronym);
}
int main(void) {
char phrase[MAX];
char acronym[10];
fgets(phrase, MAX, stdin);
CreateAcronym(phrase, acronym);
return 0;
}
【问题讨论】:
-
一个问题是输入数组的长度为 60 个字符,而输出数组的长度为 10 个字符。那只是乞求缓冲区溢出。
-
你需要增加
jinsideisupper块。 -
并在末尾添加一个空字符。
-
@EmanuelP 您的意思是执行以下操作吗? if(isupper(userPhrase[i])){ userAcronym[j]=userPhrase[i]; j++; printf("\0"); }
-
@Ale 差不多。当循环结束时,你应该做
userAcronym[j] = '\0'这将使它成为一个以零结尾的字符串。printf是在正确的位置。应该就在那之前。
标签: c substring c-strings uppercase function-definition