【问题标题】:How to change characters within an array of strings?如何更改字符串数组中的字符?
【发布时间】:2014-01-16 17:42:39
【问题描述】:

我对 C 很陌生,作为我任务的一部分,我必须使用 fgets() 删除在字符串末尾添加的换行符。

我的讲师建议采用这种方法:

char names[20];
fgets(names,20,fp);
names[strlen(names)-1]='\0';

我省略了一些代码,因为我只是在演示方法。

但是,在我们的任务中,我们必须处理字符串数组。 我试过了……

names[strlen(names[i])-1]='\0';

但似乎只找到字符串的长度,减去 1,然后在索引中使用该数字,然后将字符串设置为数组的下方 \0

有没有办法访问字符串的各个字符?

我知道我可以使用

names[i] // where i is the numeric index

但我需要访问该字符串中的各个字符。

这是我第一次在 StackOverflow 上发帖,如果我没有提供足够的详细信息或我的问题的格式不正确,请通知我。

提前致谢。

【问题讨论】:

  • names[i][strlen(names[i])-1]='\0';, names[i][index]
  • @BLUEPIXY 将其作为答案发布。
  • 您的教师代码不会严格删除换行符。如果您有兴趣,请参阅下面@erosenin 正确答案中的评论。

标签: c arrays string character


【解决方案1】:

如前所述,在 C 中,字符串是字符数组。因此,您可以像访问任何数组一样访问单个字符。对于您的任务,您需要做的是

  char names[100][20];
  //Now this declares 100 strings of size 20 each.
  //To access a single character in the position '4' from string 0 you can write
  printf("%c",names[0][3]);

  //To modify the string in position 'i' you will use 
  names[i][strlen(names[i])-1]='\0';

最后一行与您为单个字符串编写的非常相似。

使用第一个索引“i”,您可以访问该位置的字符串。并使用第二个索引访问该字符串的特定字符。

【讨论】:

  • 我考虑过 2D 数组,但不确定在问题中采用哪种方法来处理它,但感谢您的帮助,我尝试了它并且它工作得很好!谢谢。
  • 没问题!很高兴,我能帮上忙。
  • 可靠的答案。这不是对您的回答的批评;更多的OP。为了更加小心地处理输入数据,我建议在假设len-1 位置包含换行符之前进行strlen 比较或内容检查。您最终可能会以这种方式不必要地丢失一个 19 个字符名称的字母。当然,在最坏的情况下它只会截断一个字母,但可以避免。干杯。
  • 我应该澄清一下。我指的是fgets 函数的行为——它不保证换行。 OP 的问题是使用fgets 填写姓名。
  • 谢谢@Darren,我会考虑的。
【解决方案2】:

试试这个:

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

int main(void)
{
    char names[10][10];
    char c = 'A';
    for(int index = 0; i < strlen(names) - 1)
    {
        names[0][index] = c++;
    }
    names[i][strlen(names[i])-1]='\0';

    printf("%s", namws[0]);

    return 0;
}

【讨论】:

  • 很抱歉,但这并不能回答问题。请参阅 BLUEPIXY 对该问题的评论。
  • @H2CO3;我认为他在谈论一维数组。
  • 不,他不是。 “但是,在我们的任务中,我们必须处理字符串数组。[...] 但似乎只找到字符串的长度,减去 1,然后在索引中使用该数字,然后将字符串设置得更远数组到 \0" - 这就是当人们将字符串数组与字符数组混淆时出现的问题的描述。
  • @H2CO3;不提:)
【解决方案3】:

在c中,string实际上是一个char数组。 所以,

char[] charArray = "string";

charArray[0] 会给你's'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2023-03-20
    • 2019-03-01
    相关资源
    最近更新 更多