Строки на языке Си - PullRequest
       1

Строки на языке Си

0 голосов
/ 27 января 2011

Как вы можете кодировать это на языке C, если вывод такой? Мне нужен строки формат кода, потому что наша тема строки .

#include <stdio.h> 
#include <stdlib.h>

void main() 
{ 
    char my_string[50];

    printf("Enter a word:");
    scanf("%s", my_string);

    printf("Enter a word:");
    scanf("%s", my_string);

    // Some unknown code here...
    // this part is my only problem to solve this.

    getch();
}

Выход:

Hello -> (user input)

World -> (user input)

HWeolrllod -> (result)

Ответы [ 5 ]

9 голосов
/ 27 января 2011

Хорошо, вам нужно провести расследование.Как правило, мы не делаем домашнее задание для людей, поскольку:

  • это обман.
  • вы, вероятно, попадетесь, если будете копировать дословно.
  • это не поможет вам в долгосрочной перспективе.

Вызов библиотеки C для пользовательского ввода, который вы должны использовать, - fgets, в строке:

char buffer[100];
fgets (buffer, sizeof(buffer), stdin);

Это введет строку в массив символов, называемый буфером.

Если вы сделаете это с двумя разными буферами, у вас будут строки в памяти.

Тогда вам нужносоздавать указатели на них и проходить через две строки, выводя чередующиеся символы.Указатели не являются легкой темой, но следующий псевдокод может помочь:

set p1 to address of first character in string s1
set p1 to address of first character in string s1
while contents of p1 are not end of string marker:
    output contents of p1
    add 1 to p1 (move to next character)
    if contents of p2 are not end of string marker:
        output contents of p2
        add 1 to p2 (move to next character)
while contents of p2 are not end of string marker:
    output contents of p2
    add 1 to p2 (move to next character)

Перевод этого в C потребует некоторой работы, но алгоритм надежен.Вам просто нужно знать, что указатель символа может быть определен с помощью char *p1;, получение его содержимого осуществляется с помощью *p1, а его продвижение - p = p + 1; или p1++;.

Недостаточно написаниякод для вас (который я не собираюсь делать), вероятно, вам не нужно больше ничего.

2 голосов
/ 28 апреля 2015
void main()

{

 char my_string1[50],my_string2[50];  int ptr;
 ptr=0;
 printf("Enter a word : ");
 scanf("%s",my_string1);
 printf("enter a word");
 scanf("%s",my_string2);

while(my_string1[ptr]!='\0' && my_string2[ptr]!='\0')
 {
 printf("%c%c",my_string1[ptr],my_string2[ptr]);
 ptr++;
 }


 if(my_string1[ptr]!='\0')
 {
  while(my_string1[ptr]!='\0')
   { printf("%c",my_string1[ptr]);
    ptr++;
   }
 }
else
{
  while(my_string2[ptr]!='\0')
 {printf("%c",my_string2[ptr]);
  ptr++;
  }

 }

 }
0 голосов
/ 22 января 2017

Вы можете видеть, что вывод должен быть строкой, содержащей все символы User String1 и User String2 по одному ...

Вы можете сделать это как ...

//add #include<String.h>
int l1=strlen(s1);
int l2=strlen(s2);
if(l1!=l2)
{
    printf("length do not match");
    return 0;
}
char ansstr[l1+l2];
int i,j=0,k=0;
for(i=0;i<l1+l2;i=i+2)
{
    ansstr[i]=s1[j];
    ansstr[i+1]=s2[k];
    j++;
    k++;``
}
//ansstr is your answer
0 голосов
/ 13 июня 2015
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
void main() 
{ 
       char my_string1[50],my_string2[50];
       int i,l1=1,l2=0;

       printf("Enter a word:");
       scanf("%s", my_string1);

       printf("Enter a word:");
       scanf("%s", my_string2);

       l1=strlen(my_string1); /* Length of 1st string */
       l2=strlen(my_string2); /* Length of 2nd string */
       if(l1==l2)
       {
            for(i=0;i<l1;i++)
            {
                printf("%c%c",my_string1[i],my_string2[i]);
            }
       }
       else
       {
                printf("Length of the entered strings do not match");
       }
}

Это ваш необходимый код.

0 голосов
/ 27 января 2011

Хорошо, вот ваш код.Давайте, ребята, если он спросит здесь, значит, он не может решить эту проблему.

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

int main(int argc, char *argv[])
{
    char str1[] = "abcdefghijklmopq";
    char str2[] = "jklm";

    int len1 = strlen(str1);
    int len2 = strlen(str2);
    int c1 = 0, c2 = 0;
    int max = (len1 > len2) ? len1 : len2 ;

    char *result = malloc(len1 + len2);

    for(c1 = 0; c1 <= max; c1++) {
        if(c1 < len1)
            result[c2++] = str1[c1];

        if(c1 < len2)
            result[c2++] = str2[c1];
    }

    result[c2] = 0;

    printf("\n%s\n", result);

    return 0;
}

По сути, цикл выбирает символ из str1 и добавляет его к результату.Затем он выбирает символ, который стоит в том же положении, что и первый из str2, и добавляет его к результату, как и прежде.Я увеличиваю c2 на 2 каждый раз, потому что я добавляю 2 символа к result.Я проверяю, больше ли c1, чем длина строк, потому что я хочу скопировать только символы в строке без завершающего \0.Если вы знаете, что ваши строки имеют одинаковую длину, вы можете пропустить эти if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...