将元素的第一个字符存储在字符串中

时间:2018-12-09 19:00:26

标签: c arrays string

如何将元素的第一个字符存储在字符串中?例如。如果我运行

for (j=0; j < 5; j++) {
    printf("%s\n, string[j]);
}

我明白了

hello
how
are
you

由于@He Is提供的答案,我知道我可以运行printf("%c\n, string[j][0]);来打印第一个字母:

h
h
a
y

但是,如何将前几个字母存储在新数组中? 到目前为止,我有:

char secondStr[10];

for (j=0; j<5; j++) {
    secondStr[j] = string[j][0];
}

这会导致错误 赋值使指针从整数开始而没有强制转换

我知道这个问题与我之前问过的(关于打印第一个元素)略有不同-我不确定是否要对SO提出一个全新的问题。如果我要提出一个新问题,我事先表示歉意。

3 个答案:

答案 0 :(得分:3)

当您有一个指向char *string1[] = {"hello", "how", "are", "you"};的指针数组并且想要打印它的第一个字符串hello时,因此对于这样的字符串%s必须使用printf("%s",string1[0])但是如果要打印第一个字符串的第一个字符,则需要使用%c这样的printf("%c",string1[0][0])

#include <stdio.h>

int main()
{
    char *string1[] = {"hello", "how", "are", "you"};
    printf("%s",string1[0][0]);  // I think you did this fault It'll give you Segmentation fault                                                                                                         


    return 0;
}

因此,如您在上面的代码中所见,您需要将%s替换为%c

编辑

  

如果我想将首字母存储在新列表中怎么办?

然后您需要为新字符串分配内存。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *string1[] = {"hello", "how", "are", "you"};
    char **keep = calloc(sizeof(char*),5);    //memory allocating

    for (int index = 0; index <= 3; index++)
    {
        keep[index] = calloc(sizeof(char),2);     //memory allocating
        keep[index][0] = string1[index][0];         
    }

    //for test
    for (int i = 0; i <= 3; i++)
        printf("%c\n",keep[i][0]);

    return 0;
}

答案 1 :(得分:0)

如果string是std :: string,则:

    string s[6] = { "hello","how", "are", "you", "?" };

    for (int j = 0; j < 5; j++) 
    {
        if(s[j].size())
        printf("%c\n", s[j].c_str()[0]);
    }

应该的话。

答案 2 :(得分:0)

有很多选项。我只会提到一些。

  1. 使用begin()

    for( int i = 0 ; i < num ; i++ )
    {
          string:: iterator it = String[i].begin();
          cout << *it;
    }
    
  2. 使用front()

    for( int i = 0 ; i < num ; i++ )
    {
          cout << String[i].front();
    }
    
  3. 用于()

    for( int i = 0 ; i < num ; i++ )
    {
          cout << String[i].at();
    }
    

您只需遍历string的成员函数并将其用于您的目的