如何将元素的第一个字符存储在字符串中?例如。如果我运行
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提出一个全新的问题。如果我要提出一个新问题,我事先表示歉意。
答案 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)
有很多选项。我只会提到一些。
使用begin()
for( int i = 0 ; i < num ; i++ )
{
string:: iterator it = String[i].begin();
cout << *it;
}
使用front()
for( int i = 0 ; i < num ; i++ )
{
cout << String[i].front();
}
用于()
for( int i = 0 ; i < num ; i++ )
{
cout << String[i].at();
}
您只需遍历string的成员函数并将其用于您的目的