문자열 선언

C 언어의 문자열은 1차원 문자 배열이며, 마지막 요소는 줄 끝 문자인 0(널 종료 문자열, 즉 NULL 종료 문자열)입니다.

기원 후 유형 변수 C에서 문자열은 세 가지 방법으로 가능하며 그 중 두 가지는 선언 시 문자열을 초기화합니다.

첫 번째 방법:

문자 배열 선언(null 종료를 위한 공간을 추가하는 것을 잊지 마십시오):

문자;

두 번째 방법:

문자열 변수에 초기 값을 할당합니다(이 경우 컴파일러는 문자열 자체의 길이를 계산할 수 있음).

Char s = "문자열 초기화 예제";

할당 기호의 오른쪽에는 문자열 상수가 있습니다. 문자열 끝에 0('\0')이 자동으로 추가됩니다. 문자열 상수는 정적 스토리지 클래스에 배치됩니다.

세 번째 방법:

배열이 사용되고 있다는 암시적 표시입니다. 할당 기호의 왼쪽에는 기호에 대한 포인터가 표시됩니다.

Char *s="두 번째 초기화 옵션";

변수 s는 그 위치에 대한 포인터가 될 것입니다. 랜덤 액세스 메모리, 여기서 문자열 상수가 있습니다. 이러한 형식의 표기법은 문자에 대한 포인터가 종종 문자열로 참조된다는 점에서 잠재적인 오류가 있습니다. 아래 항목은 문자열을 위한 공간이 없기 때문에 문자에 대한 포인터일 뿐입니다.

문자*s;

표준 입력 장치(키보드)에서 문자열 입력

문자열 작업을 위한 함수 집합이 있습니다. 표준 입력 장치(키보드)의 입력의 경우 표준 입력/출력 모듈의 라이브러리 기능이 가장 자주 사용됩니다. 스캔그리고 얻다.

함수를 사용하여 문자열을 입력하려면 스캔, 형식을 사용합니다. « %에스» , 주소 기호는 행 식별자 앞에 사용되지 않습니다. « & » , 1차원 배열은 이미 시작에 대한 포인터로 표시되기 때문에:

scanf("%s", s);

기능 가져오기()줄 바꿈 문자에 도달할 때까지 문자를 읽습니다. 이 함수는 개행 문자를 제외한 모든 문자를 허용합니다. 종료 0('\0')이 문자열 끝에 추가됩니다. 기능 가져오기()키보드에서 읽은 일련의 문자를 문자열 매개변수에 넣고 해당 문자열에 대한 포인터(작업이 성공한 경우) 또는 NULL(오류의 경우)을 반환합니다. 아래 예에서 작업이 성공적으로 완료되면 두 개의 동일한 줄이 화면에 표시됩니다.

#포함 int main() ( char s; char *p; p=gets(s); printf(" \n 문자열 %s가 입력되었습니다. ",s); if (p) printf(" \n 문자열 %s이(가) 입력되었습니다. ", p), 0을 반환, )

전달하면서 sscanf 함수에 의한 추가 변환을 위해 키보드의 데이터를 문자열로 입력하는 데 gets 함수가 자주 사용된다는 점에 유의하십시오. 원하는 형식또는 입력 데이터의 예비 분석을 위해, 예를 들면:

#포함 #포함 #포함 int main() ( char s; int x, err; do ( printf(" \n 정수를 입력하십시오 -> "); gets(s); err=sscanf(s, "%d",&x); if (err !=1) printf(" \n 입력 오류입니다. "); ) while (err!=1); printf("\n 정수 입력 -> %d", x); return 0; )

문자열을 표준 출력으로 인쇄(모니터 화면)

문자열을 표준 출력(모니터 화면)으로 출력하려면 두 가지 기능을 사용할 수 있습니다. 인쇄그리고 넣어. printf 함수에서 "%s"가 형식으로 전달됩니다. 이 함수를 사용하는 편리함은 문자열 외에도 다른 유형의 데이터를 즉시 표시할 수 있다는 사실에 있습니다. 기능 넣어라인이 출력된 후 자동으로 다음 라인으로의 전환이 발생한다는 것입니다.

문자열 함수

C 언어의 문자열을 변환하기 위해 문자열 라이브러리가 제공됩니다. 각 기능에는 고유한 녹음 형식(프로토타입)이 있습니다.

이 문서에서는 가장 많이 사용되는 기능에 대해 설명합니다. - 읽다

문자열로 작업하는 프로그램(목록)의 예

최신 C++ 표준은 문자열 작업을 구성하기 위한 함수 및 속성(변수)이 있는 클래스를 정의합니다(클래식 C 언어에는 문자열이 없고 char 배열만 있음).

#포함

#포함

#포함

문자열로 작업하려면 표준 네임스페이스도 포함해야 합니다.

네임스페이스 std 사용

그렇지 않으면 모든 곳에서 string 대신 클래스 설명자 std::string을 지정해야 합니다.

다음은 문자열과 함께 작동하는 프로그램의 예입니다(이전 C 호환 컴파일러에서는 작동하지 않습니다!):

#포함 #포함 #포함 네임스페이스 std 사용 int main() (문자열 s = "테스트"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->지우기(s2->end()); 쫓다<< s2->c_str(); cin.get(); 반환 0; )

string 클래스의 주요 기능은 다음과 같습니다.

  • 문자 배열(내장 유형의 문자열) 또는 다른 객체로 초기화 문자열 유형. 기본 제공 유형에는 두 번째 기능이 없습니다.
  • 한 줄을 다른 줄로 복사합니다. 내장 유형의 경우 strcpy() 함수를 사용해야 합니다.
  • 읽기 및 쓰기를 위해 문자열의 개별 문자에 액세스합니다. 내장 배열에서 이것은 인덱스 연산을 사용하거나 포인터를 사용하는 간접 주소 지정을 사용하여 수행됩니다.
  • 같음을 위해 두 문자열을 비교합니다. 내장 유형의 경우 strcmp() 계열의 함수가 사용됩니다.
  • 두 문자열을 연결(연결)하여 결과를 세 번째 문자열로 제공하거나 원래 문자열 중 하나 대신 제공합니다. 내장 유형의 경우 strcat() 함수를 사용하여 결과를 얻습니다. 새로운 라인, strcpy() 및 strcat() 함수를 순차적으로 사용해야 하며 메모리 할당도 처리해야 합니다.
  • 문자열의 길이를 결정하기 위한 내장 수단(클래스 size() 및 l ength()의 멤버 함수). 내장 유형 문자열의 길이를 찾는 유일한 방법은 strlen() 함수로 계산하는 것입니다.
  • 문자열이 비어 있는지 확인하는 기능.

이것들을 고려하십시오 기본 능력자세히.

문자열 초기화설명할 때와 문자열 길이(종료 null 종결자를 포함하지 않음):

String st("내 문자열\n"); 쫓다<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";

문자열은 비어 있을 수도 있습니다.

문자열 st2;

여부를 확인하려면 문자열이 비어 있습니까?, 길이를 0과 비교할 수 있습니다.

if (!st.size()) // 비어 있음

또는 빈 문자열에 대해 true를 반환하고 비어 있지 않은 문자열에 대해 false를 반환하는 empty() 메서드를 사용합니다.

if (st.empty()) // 비어 있음

문자열 생성의 세 번째 형식은 문자열 유형의 개체를 동일한 유형의 다른 개체로 초기화합니다.

문자열 st3(st);

문자열 st3은 문자열 st로 초기화됩니다. 우리는 이러한 문자열 일치? 비교 연산자(==)를 사용해 보겠습니다.

If (st == st3) // 초기화 성공

어떻게 한 줄을 다른 줄로 복사? 일반적인 할당 연산자 사용:

st2 = st3; // st3을 st2로 복사

을 위한 문자열 연결더하기 연산자(+) 또는 더하기 할당 연산자(+=)가 사용됩니다. 두 줄이 주어집니다.

문자열 s1("안녕하세요, "); 문자열 s2("세계\n");

처음 두 개의 연결로 구성된 세 번째 문자열을 얻을 수 있습니다.

문자열 s3 = s1 + s2;

s1 끝에 s2를 추가하려면 다음과 같이 작성해야 합니다.

S1 += s2;

추가 작업은 클래스 개체를 연결할 수 있습니다. 그들 사이뿐만 아니라 내장 유형의 문자열과도 마찬가지입니다. 특수 문자와 문장 부호가 내장 유형 char * 로 표시되고 중요한 단어가 클래스 string 의 객체로 표시되도록 위의 예를 다시 작성할 수 있습니다.

Const char *pc = ", "; 문자열 s1("안녕하세요"); 문자열 s2("세계"); 문자열 s3 = s1 + pc + s2 + "\n"; 쫓다<< endl << s3;

컴파일러가 내장 유형의 객체를 클래스 string의 객체로 자동 변환하는 방법을 "알기" 때문에 이러한 표현식이 작동합니다. 내장 문자열을 문자열 객체에 간단히 할당하는 것도 가능합니다:

문자열 s1; const char *pc = "문자 배열"; s1=pc; // 오른쪽

역변환은 작동하지 않습니다. 다음 기본 제공 유형 문자열 초기화를 수행하려고 하면 컴파일 오류가 발생합니다.

문자 * str = s1; // 컴파일 오류

이 변환을 수행하려면 c_str()("C string")이라는 멤버 함수를 명시적으로 호출해야 합니다.

Const char *str = s1.c_str();

c_str() 함수는 내장 문자열 유형에서와 같이 문자열 객체의 문자열을 포함하는 문자 배열에 대한 포인터를 반환합니다. 여기서 const 키워드는 포인터를 통해 개체의 내용을 직접 수정하는 현대적인 시각적 환경에서 "위험한" 가능성을 방지합니다.

에게 개별 문자내장 유형과 마찬가지로 string 유형의 객체는 인덱스 작업을 사용하여 액세스할 수 있습니다. 예를 들어 다음은 모든 점을 밑줄로 바꾸는 코드 조각입니다.

문자열 str("www.disney.com"); 정수 크기 = str.size(); (int 나는 = 0; 나는< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Replace(str.begin(), str.end(), ".", "_");

사실, 여기에 사용된 것은 문자열 클래스의 replace 메서드가 아니라 같은 이름의 알고리즘입니다.

#포함

string 객체는 컨테이너처럼 동작하기 때문에 다른 알고리즘을 적용할 수 있습니다. 이를 통해 문자열 클래스의 기능으로 직접 해결되지 않는 문제를 해결할 수 있습니다.

다음은 문자열 클래스의 주요 연산자 및 기능에 대한 간략한 설명입니다. 표의 링크는 인터넷에서 러시아어 설명으로 연결됩니다. 문자열 클래스의 기능에 대한 전체 목록은 예를 들어 Wikipedia 또는 cplusplus.com을 참조하십시오.

문자열의 문자 지정

연산자 =

문자열에 값을 할당

양수인

문자열에 문자를 할당

개별 문자 액세스

~에

범위를 벗어난 인덱스를 확인하여 지정된 문자 가져오기

운영자

지정된 문자 가져오기

앞쪽

첫 번째 문자 얻기

마지막 문자 얻기

데이터

문자열의 첫 번째 문자에 대한 포인터를 반환

c_str

보고 수정할 수 없는문자열의 문자를 포함하는 C 문자 배열

문자열 용량 확인

비어 있는

문자열이 비어 있는지 확인

크기
길이

문자열의 문자 수를 반환

최대 크기

최대 문자 수를 반환

예약하다

저장 공간을 확보

문자열에 대한 연산

분명한

문자열의 내용을 지웁니다

끼워 넣다

문자 삽입

삭제

문자 제거

푸시백

문자열 끝에 문자 추가

팝백

마지막 문자를 제거

추가

연산자+=

문자열 끝에 문자를 추가합니다.

비교하다

두 문자열을 비교

바꾸다

지정된 문자의 모든 발생을 대체합니다.

하위 문자열

부분 문자열을 반환

복사

문자를 복사

크기 조정

저장된 문자 수 변경

»신뢰할 수 있는 SEO 대행사 인도는 중소기업의 수익을 높일 수 있습니다.

80%의 사용자가 구매하기 전에 Google 및 기타 검색 엔진에서 검색하고 검색 엔진을 통해 생성된 문의 50% 이상이 변환됩니다. 이 두 가지 통계는 검색 엔진 최적화의 중요성을 증명합니다. 명확한 요점을 보여주는 통계 및 사실이 많이 있습니다. 모든 소규모, 중간 규모 또는 대규모 비즈니스에는 전문적인 SEO 서비스가 필요합니다. 중소기업과 스타트업은 종종 예산 문제에 직면합니다. 그들은 수입을 늘리기 위해 예산 내에서 최고의 SEO 서비스를 얻기 위해 인도의 신뢰할 수 있는 SEO 대행사의 도움을 받을 수 있습니다.
검색은 소비자의 마음에 큰 영향을 미칩니다. Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot 등과 같은 다양한 공인 웹사이트에서 주요 검색 엔진 최적화 전문가들이 공유한 다양한 통계에 따르면 SEO는 리드의 대부분을 포착합니다. 또한 자연 검색 결과에서 오는 리드는 전환율이 더 높습니다. 이러한 통계와 소비자 행동은 최고의 SEO 서비스가 사치품이 아니라 모든 비즈니스의 필수품이라는 점을 더욱 분명하게 보여줍니다.
경쟁을 우회하고 비즈니스 성장을 높이려면 각 조직에서 검색 엔진 최적화 서비스를 사용해야 합니다. 큰 브랜드는 최고의 SEO 회사 또는 SEO 전문가가 제공하는 전문 SEO 서비스에 충분한 돈을 투자할 수 있지만 소규모 비즈니스 소유자는 적은 예산으로 인해 종종 이 서비스의 품질에 타협합니다. 중소기업과 신생 기업이 전문 SEO 서비스로 만들 수 있는 기회를 놓치거나 긍정적인 결과를 내지 못하는 저렴한 SEO 서비스를 사용하게 된다는 것은 어려운 사실입니다.
소규모 비즈니스 소유자와 스타트업은 제한된 예산으로도 전문적인 SEO 서비스의 이점을 누릴 수 있습니다. 최고의 솔루션은 인도에 기반을 둔 신뢰할 수 있는 SEO 회사를 찾는 것입니다. 인도에는 디지털 마케팅 대행사와 협력하여 업계 최고의 서비스를 제공하는 많은 SEO 전문가가 있습니다. 그들은 귀하의 예산에 필요한 SEO 서비스를 제공할 수 있습니다. 임금은 SEO 대행사 India와 협상하여 더 낮은 가격으로 더 나은 서비스를 받을 수 있습니다. 그러나 비용이 적게 드는 저렴한 SEO 서비스에 속지 말고 전문 지식이 자체 비용으로 제공되므로 더 많이 제공하겠다고 약속하지 마십시오. 귀하의 비즈니스를 위해 회사에 계약하기 전에 포트폴리오를 보거나 적절한 질문을 해야 합니다.
인도의 SEO 전문가는 검색 엔진 최적화의 모범 사례에 능숙합니다. 또한 Ash Vyas와 같은 인도에는 명시된 예산 내에서 비즈니스를 위한 최고의 검색 엔진 최적화 전략을 전문적으로 만드는 일부 SEO 전문가가 있습니다. SEO 전문가는 명확한 계획을 세우고 예상 결과를 공유할 것입니다. 이렇게 하면 투자와 수익을 잘 알 수 있습니다. 이는 더 나은 비즈니스 결정을 내리는 데 도움이 됩니다.
가능한 한 빨리 최고의 SEO 서비스를 제공하는 신뢰할 수 있는 인도의 SEO 회사를 찾아 계약하는 것이 좋습니다. 또한 적은 예산과 제한된 활동으로 시작하여 웹페이지 색인을 생성하고 검색 엔진에서 키워드를 높일 수 있습니다. 최고의 SEO 서비스에 투자할 수 있는 완벽한 시간이나 날을 기다리지 마십시오. 일찍 시작하면 마케팅 접근 방식을 공격적으로 진행할 수 있을 때 더 빠른 결과를 얻을 수 있습니다. 인도에 기반을 둔 신뢰할 수 있는 SEO 회사가 귀하의 현재 및 미래 계획을 정의하여 좋은 결과를 얻을 수 있도록 도와드립니다. 더 많은 색인 페이지는 순위를 높이고 지속적인 전문 SEO 관행으로 만들어진 신뢰할 수 있는 비즈니스 브랜드는 문의, 비즈니스 및 수익을 두 배로 늘릴 것입니다. 모든 소규모 비즈니스는 전문 SEO 서비스에 두 자릿수 투자로 시작할 수 있습니다. 인도에는 낮은 예산을 제공하지만 지향적인 검색 엔진 최적화 서비스의 결과를 제공하는 많은 SEO 대행사가 있습니다.

망명에서 설문 조사

  • CraigWew

    12.04.2018

    »부동산 및 일반 판매에서 고객과의 관계 구축의 중요성

    고객과의 관계 구축의 중요성.
    고객과의 관계 구축은 반드시 이루어져야 하며 판매 프로세스의 매우 중요한 부분으로 접근해야 합니다.
    고객과 자신이 실제 일대일 관계를 맺기 위해서는 두 가지가 필요합니다!
    첫째, 당신은 인식하고 거기에 있어야합니다! 두 번째로 이 과정에서 발생하는 두 가지 다른 단계가 있음을 이해해야 합니다.
    A-Be 거기-그게 무슨 뜻이야?
    o 대부분의 사람들은 다른 사람의 말을 잘 듣지 않습니다. 일반적으로 그들은 다음 답변이나 진술을 공식화하는 데 너무 바빠서 제대로 들을 수 없습니다.
    o 이것이 당신처럼 들리면 거기에 있다는 것은 닥치고 들어라는 의미입니다!
    B-첫 번째 또는 초기 단계는 무엇입니까?
    o 일반적으로 고객의 마음 속에 고객이 대하고 싶은 사람으로 자신을 확립할 수 있는 시간이 몇 분밖에 없습니다.
    o 확신이 서지 않을 때 먼저 질문을 던지고 자신에 대해 이야기할 수 있는 질문을 하는 것이 가장 좋습니다.
    o 프로로 등장하는 것도 언제나 안전합니다. - 금욕적이거나 건방진 게 아니라 자신이 하는 일을 알고 이야기하고 그 역할을 하는 사람입니다.
    C-기타 스테이지
    o 시간이 지남에 따라 그들이 가질 대화와 질문을 통해 당신은 당신의 능력을 확립하게 될 것입니다.
    o 그들은 아마도 한동안 당신을 측정할 것이라는 점에 유의하십시오. 좋은 소식은 어느 시점에서 당신이 성공적으로 관계를 맺었다면 그들은 긴장을 풀고 둘 다 집을 찾거나 파는 데 집중할 수 있다는 것입니다.
    내가 관계를 발전시키는 데 도움이 될 수 있는 것은 무엇입니까?
    o 다양한 성격 유형을 이해하려고 노력한 다음 올바른 질문을 말하고 질문합니다.
    o 좋은 관계(고객과 같은 파장을 가짐)가 있으면 판매는 기본적으로 끝났습니다. 이제 적합한 집을 찾거나 목록 서류를 작성하는 일만 남았습니다.
    성격이 다르면 어쩌지
    o 이 책은 정신의학에 관한 책이 아니므로 지금은 두 가지 주요 유형만 이해하십시오.
    o 내성적인 사람과 외향적인 사람이 있습니다.
    o 당신은 유형을 알고 있습니다. 각 분류에 맞는 당신이 아는 세 사람에 대해 생각해 보십시오.
    신체 언어와 언어 패턴은 어떻습니까?
    o 만약 그들이 빠르거나 느리다면 그들의 말투를 흉내내십시오.
    o 그들이 크거나 작게 말하면 똑같이 하십시오. 그들은 앞으로 또는 뒤로 기울고 있습니까?
    o 말할 필요도 없이, 이 주제에 대해 쓰여진 책들이 많이 있습니다. 특히 회의실이나 누군가의 집에서 $400,000 거래를 논의할 때 중요한 요소입니다.
    관계를 발전시키는 것은 배우고 향상시킬 수 있는 기술입니다.
    o 우리 모두는 우리에게 무언가를 판매한 판매원을 경험했지만 우리는 판매되고 있다는 느낌을 받지 못했습니다. 그 이유는 그 또는 그녀가 당신이 그들을 믿을 수 있는 곳에서 편안함을 느끼게 해주기 때문입니다.
    우리는 어떻게 관계를 발전시킬 수 있습니까?
    o 눈과 귀를 사용하여 질문하십시오. 설명하기
    o 눈을 사용하십시오:
    o 그들의 드레스-차-개인 소유물을 보라. 그리고 나는 정말로 그들을 보고 그것이 그들에 대해 당신에게 말하는 것을 해독한다는 것을 의미합니다.
    o 귀를 사용하십시오:
    o 그들이 말하는 것을 듣고 그들의 진정한 동기를 파악하기 위해 질문을 하십시오!
    이제 이 모든 대화를 하는 동안 그들과 공통점을 발견하게 될 한두 가지가 있을 것입니다. (가족, 지역, 낚시 등) 공통점을 발견하면 친한 사이임을 알리고 잠시 시간을 내어 이야기를 나눈다.
    목표는 무엇입니까?
    o 일단 그들이 당신을 그들 중 하나로 받아들인다면 당신은 지금 팀으로서 함께 일하고 있기 때문에 판매에 있어 정말 훌륭한 경험을 할 수 있는 위치에 있는 것입니다. 당신은 더 이상 판매원이 아니라 이제 자문 위치에 있습니다. .
    o 고객이 자신의 세계에 들어가는 것을 허용하거나 허용하지 않을 것임을 기억하십시오. 이것을 이해하고 진심으로 공감하기 위해 노력하면 신뢰를 얻을 수 있습니다. 대부분의 경우, 도중에 이런 일이 발생하면 실제로 그들이 긴장을 푸는 것을 보게 될 것입니다(신체 언어).
    o 이를 설명하기 위해 연설을 하고 마침내 청중과 연결되면 그들이 승인의 의미로 고개를 끄덕일 것이라는 사실을 알아차린 적이 있습니다. 이 모든 것이 진부해 보일 수 있지만 그렇지 않습니다.
    결론적으로, 고객의 신뢰를 얻을 수 있다면 제품이나 서비스를 판매하는 것이 훨씬 쉽고 관련된 모든 사람이 즐거운 경험을 할 수 있습니다.
    Win/Win이 최상의 상황임을 항상 기억하십시오.

이 사이트에서 AdBlock을 일시 중지하십시오.

따라서 C 언어의 문자열. 다른 많은 프로그래밍 언어에서와 같이 별도의 데이터 유형이 없습니다. C 언어에서 문자열은 문자 배열입니다. 줄의 끝을 표시하기 위해 "\0" 문자가 사용됩니다. 이는 이 단원의 마지막 부분에서 설명했습니다. 어떤 식으로든 화면에 표시되지 않으므로 보기에는 작동하지 않습니다.

문자열 생성 및 초기화

문자열은 문자의 배열이므로 문자열을 선언하고 초기화하는 것은 1차원 배열을 사용하는 유사한 작업과 유사합니다.

다음 코드는 문자열을 초기화하는 다양한 방법을 보여줍니다.

목록 1.

차르스트; char str1 = ("Y","o","n","g","C","o","d","e","r","\0"); char str2 = "안녕하세요!"; char str3 = "안녕하세요!";

그림 1 문자열 선언 및 초기화

첫 번째 줄에서는 단순히 10개의 문자로 구성된 배열을 선언합니다. 실제로 문자열도 아닙니다. 왜냐하면 문자 집합일 뿐인 한 null 문자 \0 이 부족합니다.

두 번째 줄. 이마에서 초기화하는 가장 간단한 방법. 각 기호를 별도로 선언합니다. 여기서 중요한 것은 null 문자 \0 을 추가하는 것을 잊지 않는 것입니다.

세 번째 줄은 두 번째 줄과 비슷합니다. 그림에주의하십시오. 왜냐하면 오른쪽의 문자열에는 배열의 요소보다 적은 수의 문자가 있고 나머지 요소는 \0 으로 채워집니다.

네 번째 줄. 보시다시피 여기에서는 크기가 설정되어 있지 않습니다. 프로그램은 이를 자동으로 계산하고 필요한 길이의 문자 배열을 생성합니다. 이것은 널 문자 \0을 마지막에 삽입할 것입니다.

문자열을 출력하는 방법

생성된 문자열을 화면에 표시하는 본격적인 프로그램에 위의 코드를 추가해 보겠습니다.

목록 2.

#포함 int main(void) ( char str; char str1 = ("Y","o","n","g","C","o","d","e","r"," \0"); char str2 = "안녕하세요!"; char str3 = "안녕하세요!"; for(int i = 0; i< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


그림 2 화면에 문자열을 표시하는 다양한 방법

보시다시피 화면에 문자열을 표시하는 몇 가지 기본 방법이 있습니다.

  • %s 지정자와 함께 printf 함수 사용
  • puts 함수를 사용
  • 두 번째 매개변수로 stdout을 지정하여 fputs 함수를 사용합니다.

유일한 주의 사항은 puts 및 fputs 함수입니다. puts 함수는 출력을 다음 줄로 줄바꿈하지만 fputs 함수는 그렇지 않습니다.

보시다시피 출력은 매우 간단합니다.

문자열 입력

문자열 입력을 사용하면 출력보다 상황이 조금 더 복잡합니다. 가장 간단한 방법은 다음과 같습니다.

목록 3.

#포함 int main(void) ( char str; gets(str); puts(str); return 0; )

gets 함수는 프로그램을 일시 중지하고, 키보드에서 입력된 문자열을 읽고, 이름이 매개변수로 함수에 전달되는 문자 배열에 배치합니다.
gets 함수는 Enter 키에 해당하는 문자로 종료되고 문자열에 널 문자로 기록됩니다.
위험을 눈치채셨나요? 그렇지 않은 경우 컴파일러에서 친절하게 경고합니다. 사용자가 Enter 키를 누를 때만 gets 함수가 종료되기 때문입니다. 이것은 우리가 20개 이상의 문자를 입력한 경우 배열을 넘어설 수 있다는 사실로 가득 차 있습니다.
그건 그렇고, 초기 버퍼 오버플로 오류는 가장 일반적인 유형의 취약점으로 간주되었습니다. 오늘날에도 여전히 발견되지만 프로그램을 해킹하는 데 사용하기가 훨씬 더 어려워졌습니다.

그래서 우리는 무엇을 가지고 있습니다. 제한된 크기의 배열에 문자열을 작성하는 작업이 있습니다. 즉, 사용자가 입력한 문자 수를 어떻게든 제어해야 합니다. 그리고 여기서 fgets 함수가 구출됩니다.

목록 4.

#포함 int main(void) ( char str; fgets(str, 10, stdin); puts(str); return 0; )

fgets 함수는 문자열을 쓸 변수, 쓸 문자열의 크기, 문자열에 쓸 데이터를 가져올 스트림 이름(이 경우 stdin)의 세 가지 인수를 입력으로 받습니다. 3과에서 이미 알고 있듯이 stdin은 일반적으로 키보드와 관련된 표준 입력 스트림입니다. 데이터가 stdin 스트림에서 올 필요는 없습니다. 앞으로 이 함수를 사용하여 파일에서 데이터를 읽을 수도 있습니다.

이 프로그램을 실행하는 동안 10자보다 긴 문자열을 입력하고 처음부터 9자만 입력하고 줄 바꿈 문자가 여전히 배열에 기록되면 fgets는 문자열을 필요한 길이로 "자릅니다".

fgets 함수는 10자를 읽는 것이 아니라 9 ! 우리가 기억하듯이 문자열에서 마지막 문자는 null 문자용으로 예약되어 있습니다.

확인 해보자. 마지막 목록에서 프로그램을 실행해 보겠습니다. 그리고 1234567890 문자열을 입력합니다. 문자열 123456789가 화면에 표시됩니다.


그림 3 fgets 함수의 작동 예

질문이 생깁니다. 열 번째 캐릭터는 어디로 갔습니까? 그리고 대답하겠습니다. 아무데도 가지 않고 입력 스트림에 남아 있습니다. 다음 프로그램을 실행합니다.

목록 5.

#포함 int main(void) ( char str; fgets(str, 10, stdin); puts(str); int h = 99; printf("do %d\n", h); scanf("%d",&h) ; printf("%d 이후\n", h); 반환 0; )

다음은 그녀의 작업 결과입니다.


그림 4 비어 있지 않은 표준 입력 버퍼

무슨 일이 있었는지 설명하겠습니다. fgets 함수를 호출했습니다. 그녀는 입력 스트림을 열고 우리가 데이터를 입력하기를 기다렸습니다. 키보드에서 1234567890\n을 입력했습니다(\n은 Enter 를 나타냄). 이것은 입력 스트림 stdin 으로 이동했습니다. fgets 함수는 예상대로 입력 스트림에서 처음 9개 문자 123456789를 가져와 여기에 널 문자 \0을 추가하고 이것을 문자열 str에 썼습니다. 입력 스트림에 아직 0\n이 남아 있습니다.

다음으로 변수 h를 선언합니다. 그 값을 화면에 표시합니다. 그런 다음 scanf 함수를 호출합니다. 여기에 우리가 무언가를 입력할 수 있을 것으로 예상되지만, 0\n이 입력 스트림에 멈추면 scanf 함수는 이것을 입력으로 받아 변수 h에 0을 씁니다. 다음으로 화면에 표시합니다.

물론 이것은 정확히 우리가 기대하는 동작이 아닙니다. 이 문제를 해결하려면 사용자가 입력한 문자열을 읽은 후 입력 버퍼를 지워야 합니다. 이렇게 하려면 특수 함수 fflush 를 사용하십시오. 하나의 매개변수(지울 스트림)만 있습니다.

동작을 예측할 수 있도록 마지막 예제를 수정해 보겠습니다.

목록 6.

#포함 int main(void) ( char str; fgets(str, 10, stdin); fflush(stdin); // 입력 스트림 지우기 puts(str); int h = 99; printf("do %d\n", h) ; scanf("%d",&h); printf("%d 이후\n", h); 반환 0; )

이제 프로그램이 정상적으로 작동합니다.


그림 4 fflush 기능으로 stdin 버퍼 플러시

요약하면 두 가지 사실을 알 수 있습니다. 첫번째. 현재 gets 함수를 사용하는 것은 안전하지 않으므로 모든 곳에서 fgets 함수를 사용하는 것이 좋습니다.

초. fgets 함수를 사용하는 경우 입력 버퍼를 지우는 것을 잊지 마십시오.

이것으로 문자열 입력에 대한 대화를 마칩니다. 계속 진행합니다.

마지막 업데이트: 2015년 10월 31일

연쇄

문자열 연결 또는 연결은 + 연산자 또는 Concat 메서드를 사용하여 수행할 수 있습니다.

문자열 s1 = "안녕하세요"; 문자열 s2 = "세계"; 문자열 s3 = s1 + " " + s2; // 결과: string "hello world" string s4 = String.Concat(s3, "!!!"); // 결과: 문자열 "hello world!!!" 콘솔 WriteLine(s4);

Concat 메서드는 두 개의 문자열을 매개 변수로 사용하는 String 클래스의 정적 메서드입니다. 다른 수의 매개변수를 사용하는 다른 버전의 메소드도 있습니다.

Join 메서드를 사용하여 문자열을 연결할 수도 있습니다.

문자열 s5 = "사과"; 문자열 s6 = "하루"; 문자열 s7 = "유지"; 문자열 s8 = "의사"; 문자열 s9 = "멀리"; 문자열 값 = 새 문자열( s5, s6, s7, s8, s9 ); 문자열 s10 = String.Join(" ", 값); // 결과: string "하루 사과는 의사를 멀리합니다"

Join 메서드도 정적입니다. 위에서 사용된 메서드 버전은 구분 기호 문자열(이 경우 공백)과 구분 기호로 연결 및 분리될 문자열 배열이라는 두 개의 매개 변수를 사용합니다.

문자열 비교

문자열을 비교하려면 정적 Compare 메서드를 사용합니다.

문자열 s1 = "안녕하세요"; 문자열 s2 = "세계"; int 결과 = String.Compare(s1, s2); 만약 (결과<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result >0) ( Console.WriteLine("Line s1은 line s2 뒤에 옵니다."); ) else ( Console.WriteLine("Lines s1과 s2는 동일합니다."); ) // 결과는 "Line s1이 line s2 앞에 옵니다."

이 버전의 Compare 메서드는 두 개의 문자열을 사용하여 숫자를 반환합니다. 첫 번째 문자열이 두 번째 문자열보다 알파벳순으로 높으면 0보다 작은 숫자가 반환됩니다. 그렇지 않으면 0보다 큰 숫자가 반환됩니다. 그리고 세 번째 경우 - 문자열이 같으면 숫자 0이 반환됩니다.

이 경우 문자 h가 문자 w보다 알파벳순으로 높기 때문에 첫 번째 줄도 더 높습니다.

문자열에서 검색

IndexOf 메서드를 사용하여 문자열에서 단일 문자 또는 하위 문자열이 처음 나타나는 인덱스를 결정할 수 있습니다.

문자열 s1 = "hello world"; 문자 ch = "오"; int indexOfChar = s1.IndexOf(ch); // 4와 같음 Console.WriteLine(indexOfChar); 문자열 subString = "wor"; int indexOfSubstring = s1.IndexOf(하위 문자열); // 6과 같음 Console.WriteLine(indexOfSubstring);

LastIndexOf 메서드는 비슷한 방식으로 작동하며 문자열에서 마지막으로 나타나는 문자 또는 하위 문자열의 인덱스만 찾습니다.

다른 방법 그룹을 사용하면 문자열이 특정 하위 문자열로 시작하거나 끝나는지 확인할 수 있습니다. 이것이 StartsWith 및 EndsWith 메소드의 용도입니다. 예를 들어 폴더에서 확장자가 .exe인 모든 파일을 제거하는 작업이 있습니다.

문자열 경로 = @"C:\SomeDir"; 문자열 파일 = Directory.GetFiles(경로); (int 나는 = 0; 나는< files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

줄 분할

Split 함수를 사용하여 문자열을 하위 문자열 배열로 분할할 수 있습니다. 매개변수로 Split 함수는 구분 기호 역할을 하는 문자 또는 문자열의 배열을 사용합니다. 예를 들어, 공백 문자로 나누어 용어의 단어 수를 계산해 보겠습니다.

String text = "그래서 모든 일이 일어났습니다"; 문자열 단어 = text.Split(new char ( " " )); foreach (문자열 s) ( Console.WriteLine(s); )

이것은 공백으로 분할하는 가장 좋은 방법은 아닙니다. 입력 문자열에 여러 개의 연속 공백이 있을 수 있고 공백도 최종 배열에 포함될 수 있으므로 다른 버전의 방법을 사용하는 것이 좋습니다.

문자열 단어 = text.Split(new char( " "), StringSplitOptions.RemoveEmptyEntries);

두 번째 매개변수 StringSplitOptions.RemoveEmptyEntries는 모든 빈 하위 문자열을 제거하도록 지시합니다.

문자열 자르기

선행 또는 후행 문자를 자르려면 Trim 기능을 사용하십시오.

문자열 텍스트 = "hello world"; 텍스트 = 텍스트.Trim(); // 결과 "hello world" text = text.Trim(new char ( "d", "h" )); // 결과 "ello world"

매개변수가 없는 Trim 함수는 선행 및 후행 공백을 자르고 잘린 문자열을 반환합니다. 트리밍할 시작 및 끝 문자를 명시적으로 지정하기 위해 해당 문자의 배열을 함수에 전달할 수 있습니다.

이 기능은 부분적으로 유사합니다. TrimStart 기능은 시작 문자를 자르고 TrimEnd 기능은 끝 문자를 자릅니다.

Substring 기능을 사용하면 문자열의 특정 부분을 트리밍할 수 있습니다.

문자열 텍스트 = "좋은 하루"; // 세 번째 문자부터 자르기 text = text.Substring(2); // "좋은 하루" 결과 Console.WriteLine(text); // 처음부터 마지막 ​​두 문자까지 자르기 text = text.Substring(0, text.Length - 2); // 결과는 "좋음"입니다. Console.WriteLine(text);

Substring 함수는 잘린 문자열도 반환합니다. 매개변수로 사용된 첫 번째 버전은 문자열을 트리밍할 인덱스를 사용합니다. 두 번째 버전은 절단 시작 인덱스와 스트링 절단 부분의 길이라는 두 가지 매개변수를 사용합니다.

끼워 넣다

한 행을 다른 행에 삽입하려면 삽입 기능을 사용하십시오.

문자열 텍스트 = "좋은 하루"; string subString = "멋진"; 텍스트 = text.Insert(8, 하위 문자열); Console.WriteLine(텍스트);

Insert 함수의 첫 번째 매개변수는 하위 문자열을 삽입할 인덱스이고 두 번째 매개변수는 하위 문자열 자체입니다.

행 제거

Remove 메서드는 문자열의 일부를 제거하는 데 도움이 됩니다.

문자열 텍스트 = "좋은 하루"; // 마지막 문자의 인덱스 int ind = text.Length - 1; // 마지막 문자를 잘라냅니다. text = text.Remove(ind); Console.WriteLine(텍스트); // 처음 두 문자를 잘라냅니다. text = text.Remove(0, 2);

Remove 메서드의 첫 번째 버전은 모든 문자를 제거할 문자열의 인덱스를 사용합니다. 두 번째 버전은 제거할 문자 수인 매개변수를 하나 더 사용합니다.

바꿔 놓음

한 문자 또는 부분 문자열을 다른 것으로 바꾸려면 Replace 메서드를 사용합니다.

String text = "좋은 하루 되세요"; text = text.Replace("좋은", "나쁜"); Console.WriteLine(텍스트); 텍스트 = text.Replace("오", ""); Console.WriteLine(텍스트);

Replace 함수를 사용하는 두 번째 경우에는 "o" 문자 하나의 문자열이 빈 문자열로 대체됩니다. 즉, 실제로 텍스트에서 제거됩니다. 비슷한 방식으로 특정 텍스트를 줄로 삭제하는 것은 쉽습니다.

케이스 변경

문자열을 대문자와 소문자로 변환하기 위해 각각 ToUpper() 및 ToLower() 함수가 사용됩니다.

String hello = "안녕하세요!"; Console.WriteLine(hello.ToLower()); // 안녕 세계! Console.WriteLine(hello.ToUpper()); // 안녕하세요 세계입니다!