2014-11-09 2 views
-1

문자열의 모든 공백을 "-"로 대체하고 문자열을 출력하는 함수에 대해 몇 줄의 코드를 작성했습니다. 코드가 컴파일되지만 실행될 때 "새 문자열은 대체 코드 0입니다."라는 내용이 인쇄됩니다. 아무도 내 코드가 잘못되어 가고있는 곳을 말해 줄 수 있습니까? char가 함수에 전달되는 방식과 관련이 있다고 가정합니다.변수를 함수에 전달하는 문제

//Ben Adamson 
//v1.0 
#include <stdio.h> 
#include <conio.h> 

void replace(char s) 
{ 
    int num = 0; 
    while (s != '\0') 
    { 
     if (s == ' ') 
     { 
      s = "-"; 
      num++; 
     } 
     s++; 
    } 
    printf("New string is %c with %d replacements", s, num); 
} 

int main() 
{ 
    char str = "The cat sat"; 
    replace(str); 
    _getch(); 
    return 0; 
} 
+1

문자열 리터럴은 수정할 수 없습니다. 'char str [] = "를 사용하십시오. 대신 고양이가 앉았습니다; (당신이''char str = ""을 의미한다고 가정 할 때,''char * str = "에 의해 고양이가 앉았다";;) – haccks

+0

올바른 방향으로 나를 설정 해주는 덕분에 감사합니다. 아래의 전체 솔루션을 해결했습니다. – BenAdamson

+0

이 코드에는 몇 가지 컴파일 오류 및 경고가 있습니다. –

답변

0

나는 모든 코드 문제를 해결하는 방법을 찾아 냈습니다. 아래 코드를 참조하십시오.

//Ben Adamson 
//v1.0 
#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

void replace(char *s); 

int main() 
{ 
    char str[] = "The cat sat"; 
    replace(str); 
    _getch(); 
    return 0; 
} 

void replace(char *s) 
{ 
    int num = 0; 
    unsigned int i; 

    for(i=0; i<strlen(s); i++) 
    { 
     if (s[i] == ' ') 
     { 
      s[i] = 45; 
      num++; 
     } 
    } 

    printf("New string is %s with %d replacements", s, num); 
} 
+1

가독성을 위해''-''에'45'을 대입하거나'/ * 대시 기호 * /'로 덧붙일 것을 제안합니다. –

+1

처음에는'for' 루프 직전에 s가 유효한지 확인하고 싶습니다 :'if (! s) return;' –

+1

코드는 괜찮지 만 두 배 빠릅니다. C 문자열은 0으로 끝납니다. 'strlen' 함수는 0을 찾을 때까지 문자열을 통해 얼마나 많은 문자가 있는지를 계산합니다. 그러면'for' 반복문이 생깁니다. 그래서 실제로 두 번 문자열을 스캔하고 있습니다. 'for '대신'while (s [i]! = 0)'을 사용하면 한 번만 스캔 할 수 있습니다. –

관련 문제