Вывод, передача и хранение строк - C (СИ)
Формулировка задачи:
Собственно, вопрос следующий:
Необходимо считать строку и изменить её. Проделать это с N строками. Затем вывести результат изменения всех строк.
Грубо говоря, мы узнаём у пользователя сколько строк будет вводиться, считываем поочерёдно строки, параллельно изменяя их определённым образом, а затем у меня загвоздка: не знаю, как лучше поступить... Наверное, куда-то и как-то сохранить. Но как создать нужное кол-во массивов типа char с разными именами под изменённые строки - не знаю. Подскажите, пожалуйста. Обрыл весь форум...
Прикладываю код.
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
int ai,a;
char str0[BUFSIZ];
printf("Input number of strings: ");
scanf("%d",&a);
for(ai=0;ai<a;ai++)
{
fflush(stdin);
char str[BUFSIZ]; int size,l;
printf("\n");
gets(str);
fflush(stdin);
size=strlen(str)+1;
int second_words_lenght=0,first_space=0,k;
for(k=0;k<size;k++)
{
if (str[k]==' ')
{
if (first_space==0)
{
first_space=k;
}
else
//определяем длину второго слова (начиная от второго пробела и заканчивая символом после первого пробела(справа налево))
{
if (second_words_lenght==0)
{
second_words_lenght=k-first_space;
}
}
}
}
for (k=0;k<second_words_lenght;k++)
{
char tmp=str[first_space];
for (l=first_space;l<size-2;l++)
{
str[l]=str[l+1];
}
str[size-2]=tmp;
}
int g;
for (g=0;g<=size+1;g++)
{
str0[g]=str[g];
}
puts(str);
}
return(0);
}
Не в той теме разместил. Поздно заметил. Прошу прощения!
Решение задачи: «Вывод, передача и хранение строк»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_STR 20 // максимальное количество строк
#define LENGTH 100 // максимальная длина строки
int main() {
size_t count; // вводим количество строк
printf( "Введите количество строк " );
scanf( "%lu", &count );
// убираем символ новой строки, оставшийся после считывания числа из потока ввода
while ( getchar() != '\n' )
;
// это и есть массив строк, в который будем будем сохранять введённые пользователем строки
char arrStr[ MAX_STR ][ LENGTH ]; // arrStr[ 0 ] - это первая строка в массиве, arrStr[ 1 ] - вторая и т.д.
size_t i;
for ( i = 0; i < count; ++i ) { // в цикле
gets( arrStr[ i ] ); // считываем очередную строку, введённую пользователем
// меняем сразу же после ввода строку номер i - первый символ строки (с индексом 0 который)
arrStr[ i ][ 0 ] = toupper( arrStr[ i ][ 0 ] ); // приводим к верхнему регистру
}
puts( "" );
// выводим изменённые строки
for ( i = 0; i < count; ++i ) {
puts( arrStr[ i ] );
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками
- Объявление переменных: count (количество строк), arrStr (массив строк)
- Ввод количества строк с помощью функции scanf
- Удаление символа новой строки из потока ввода с помощью функции getchar
- Инициализация массива строк arrStr с помощью цикла for
- Считывание строки с помощью функции gets и сохранение ее в массиве arrStr
- Приведение первого символа каждой строки к верхнему регистру с помощью функции toupper
- Вывод всех строк с помощью цикла for и функции puts