【问题标题】:Writing a c program to attach a prefix to a list of strings entered编写一个 c 程序以将前缀附加到输入的字符串列表
【发布时间】:2018-02-22 13:27:34
【问题描述】:

我是 C 编程的新手,我正在编写一个程序来为用户输入的字符串列表附加前缀。 这是一段 sn-p 代码。

char names[5][20], prefix[5];
int i=0;
// accept 5 names and a prefix
printf("Please enter the 5 names and a prefix\n");
for(i;i<=4;i++ )
{
    printf("Enter name %d\n ",i+1);
    scanf("%s", &names[i]);

}
printf("prefix: \n ");
scanf("%s", &prefix);
printf("\n\n\n");


for(i=0;i<=4;i++)
{
    strcat(prefix,names[i]);

    printf("%s\n", prefix);
}

我的问题是,不是在输入的下一个字符串中添加前缀,而是将它们全部列出。

这就是我的意思:

Please enter the 5 names and a prefix
Enter name 1
 i
Enter name 2
 c
Enter name 3
 h
Enter name 4
 a
Enter name 5
 e
prefix:
 m



mi
mic
mich
micha
michae

【问题讨论】:

  • strcat() 不能那样工作。
  • strcat() 中的 cat 更多地代表“复制到末尾”而不是“连接到”。

标签: c loops for-loop


【解决方案1】:

数组prefix 有五个元素。 names 中的子数组有 20 个元素。

即使每个字符串只有一个字符长,那将是一个六字符的字符串(不包括字符串零终止符,它是七个字符)。这不适合五个字符的数组。

你需要将prefix的长度增加不少。

它也没有做你想做的事,因为 strcat 不是这样工作的。

如果你只想打印带有前缀的字符串,那么就这样做:

printf("%s%s\n", prefix, names[i]);

如果您想实际为字符串添加前缀以供以后使用,那么我建议为前缀字符串使用第二个数组:

char prefixed_names[5][25];
for (size_t i = 0; i < 5; ++i)
{
    strcpy(prefixed_names[i], prefix);  // Copy the prefix to the new string
    strcat(prefixed_names[i], names[i]);  // Append the name
}

【讨论】:

  • 现在看起来好多了。
  • 您可以在不先以任何方式初始化数组的情况下使用strcpy() 吗?我记得读过您应该首先执行chararray[0] = 0 之类的操作,以便我们可以确定其中没有任何垃圾,并且该字符串被正确识别为空字符串。也许我有什么问题?
  • @domsson strcpy 函数只是覆盖目标中已经存在的任何内容。它不需要以任何方式初始化目标。另一方面,strcat 函数需要一个以零结尾的字符串才能位于目标位置。
  • 啊,我明白了。很高兴知道,谢谢你为我清理它!
【解决方案2】:

如果我明白你会实现什么:

char names[5][20], prefix[5];
char tmp[32];
int i=0;
// accept 5 names and a prefix
printf("Please enter the 5 names and a prefix\n");
for(i;i<=4;i++)
   {
    printf("Enter name %d\n ",i+1);
    scanf("%s", &names[i]);
   }
printf("prefix: \n ");
scanf("%s", &prefix);
printf("\n\n\n");

for(i=0;i<=4;i++)
   {
    strcpy(tmp, prefix);
    strcat(tmp, names[i]);
    printf("%s\n", tmp);
   }

问题是你正在连接同一个容器中的所有字符串prefix

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多