2014-12-31 5 views
-2

Я хотел бы перебирать строку (введенную пользователем), возвращая введенную строку с добавленным пространством после каждого символа. То есть «Hello» -> «H e l l o».Объединить две строки итеративно - C

Моего кода в C:

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

int main() 
{ 
    char str[] = ""; 
    printf("Enter a string: "); 
    scanf("%s", &str); 

    int i = 0; 
    char newstr[150] = ""; 

    for (i = 0; i < strlen(str); i++) 
    { 
     strcat(newstr, str[i]); 
     strcat(newstr, " "); 
    } 

    printf("Expanded String: "); 
    printf("%s", newstr); 

    return 0; 
} 

Моих ошибок заключаются в следующем:

предупреждение: проходя аргумент 2 из 'strcat' делает указатель из целого числа без гипса [по умолчанию включено] -----> strcat (newstr, str [i]);

примечание: ожидается 'const char *', но аргумент имеет тип 'char' -----> char * _EXFUN (strcat, (char * __ ограничение, const char * __ ограничение));

Я использую синтаксис python, где я могу конкатенировать индекс строки, это где я ошибаюсь в своем C-коде?

+0

'str [i]' имеет тип 'char', а не' char * '. Эта проблема имеет более легкое решение, если вы просто читаете символ ввода 1 во времени и печатаете 1 символ, 1 пробел, ... – ryanpattison

+0

'str' будет иметь размер один (чтобы удерживать нулевой ограничитель), поэтому вы не будете быть в состоянии подготовить что-либо значимое. Вам не нужно перебирать 'str', чтобы выполнить его; 'strcat' сделает это за вас. –

+0

Вы хотите только распечатать его пробелами между ними или вам это нужно в переменной? – Rizier123

ответ

2
for (i = 0; i < strlen(str); i++) 
{ 
    newstr[2*i]=str[i]; 
    newstr[2*i+1]=' '; 
} 
// newstr[2 * strlen(str)] = '\0'; 
// thanks for the hint - I omit that because 
// the whole buffer had been cleared during initialization 
+0

'newstr [2 * strlen (str)] = '\ 0';' (или, возможно, 'i <= strlen', если у вас есть дополнительное пространство). – ryanpattison

+0

Спасибо, я тоже об этом подумал, но потом решил против него, потому что полный буфер уже был очищен 'char newstr [150] =" ";'. –

+0

Большое спасибо. Я сделал трассировку вручную, и это кажется идеальным решением. Однако, если я вхожу, произнося «Hello», вывод программы «H». Я нахожу это очень запутанным. это, вероятно, проблема с компилятором, то есть проблема, не связанная с кодом? – ballin

Смежные вопросы