#c #arrays #string
#c #массивы #строка
Вопрос:
Допустим, у нас есть эта входная строка:
str[1024]="ABCDEFGHIJKL"
И хотел бы, чтобы этот выходной массив:
{"ABC", "DEF", "GHI", "JKL"}
Как можно разделить каждые 3 символа в str
на массив подстрок?
Вот мой код, но он печатает только первые 3 символа, фактически не сохраняя их в массиве:
int main(){
char str[MAX]="ABCDEFGHIJKL";
int count=0, i=0;
char sub[3];
char arr[6][3]={};
while (count<3){
sub[i]=str[i count];
count ;
printf("%c", sub[i]);
}
}
Комментарии:
1.
[3]
слишком короткий, чтобы содержать символ nul, который вам нужен для создания правильных строк C и их печати.2. только если вам нужно, чтобы они завершались нулем, при этом говорилось
3. Вы указываете программе копировать только первые 3 символа. Они хранятся в,
sub[]
ноarr[][]
остаются неиспользованными.
Ответ №1:
Просто просмотрите всю строку и поместите каждый символ на свое место. Не забывайте, что строка «ABC» занимает четыре байта.
По мере перебора символов входной строки, в какую выходную строку они переходят, выглядит следующим образом:
0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3
Это i/3
. Схема того, в какую позицию в выходных данных они попадают, выглядит следующим образом:
0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2
Это i%3
. Таким образом, если i
это позиция во входной строке, то позиция в выходном массиве равна [i/3][i%3]
. Таким образом:
#include <stdio.h>
#include <string.h>
#define MAX 512
int main(){
char str[MAX]="ABCDEFGHIJKL";
int count=0, i=0;
char sub[3];
char arr[MAX/3][4]={};
/* Go through the string putting each character in
its proper place */
for (int i = 0; i < strlen(str); i)
arr[i/3][i%3] = str[i];
/* Print the strings out */
for (int i = 0; i < (strlen(str) / 3); i)
printf("%sn", arr[i]);
}
ABC
DEF
GHI
JKL