Как найти длину переменной в c

Overview

In C, a string is an array of characters that is terminated with a null character “”. The length of a string will be determined by counting all the characters in the string (except for the null character).

Scope of Article

  • In this article, we will learn to find the length of a String in C.
  • All the methods to find the length of a String will be explained in this article.
  • Every method will be explained using syntax, images, and examples.

Introduction

The string length in C is equal to the count of all the characters in it (except the null character “”).

String length in C

For Example, the string “gfddf” has a length of 5 and the string “4343” has a length of 4.

Note:
In C, a String is an array of characters that is terminated with a null character “” to indicate the end of the string.

How to Find the String Length in C?

We can find the length of a String by counting all the characters in it (before the null character) using a for loop. We can also use the built-in string.h library function strlen() or the sizeof() operator.
Let us understand how to use these methods in the coming sections.

String Length in C using a User-Defined Function

We can find the length of a string using a user-defined function by iterating over the string in a for loop and incrementing the count of characters (length) by 1 till it reaches the null character “” and then returning the count.

Let’s take a look at its implementation:
Code

// finding the length of a string using a user-defined function

#include <stdio.h>

// The User-defined method
int str_length(char str[]) {
    // initializing count variable (stores the length of the string)
    int count; 
    
    // incrementing the count till the end of the string
    for (count = 0; str[count] != ''; ++count);
    
    // returning the character count of the string
    return count; 
}

// Driver code
int main() {
    // initializing the array to store string characters
    char str[1000]; 
 
    // inputting the string
    printf("Enter the string: ");
    scanf("%s", str); 
    
    // assigning the count of characters in the string to the length of the string
    int length = str_length(str); 
    
    //  printing the length of string
    printf("The length of the string is %d", length); 
 
    return 0;
}

Output

Enter the string: 567lens
The length of the string is 7

Explanation:

In the above example, we are finding the length of a string by iterating over it in a for loop and incrementing the count by 1 in each iteration till it reaches the null character. The value of count after the end of the for loop will be equal to the length of the string.

String Length in C Using Built-In Library Function

The length of a string can be found using the built-in library function strlen() in string.h header file. It returns the length of the string passed to it (ignoring the null character).

String Length in C using Built-In Library

Syntax


The string is passed to the strlen() function, which returns its length.

Let us take a look at its implementation.
Code


// finding the length of a string using the strlen() function from the string.h library

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

int main() {
    char str[1000]; // initializing the array to store string characters
 
    // inputting the string
    printf("Enter the string: ");
    scanf("%s", str); 
    
    // initializing the length variable
    int length;
    
    // Using the strlen() function to return the length of the string and assign it to the length variable
    length = strlen(str); 
    
    // printing the length of string
    printf("The length of the string is %d", length); 
 
    return 0;
}

Output :

Enter the string: 5654dds
The length of the string is 7

In the above example, we are finding the length of a string by using the string.h library function strlen(), which returns the length of the string passed to it.

String Length in C Using the sizeof() Operator

We can also find the length of a string using the sizeof() Operator in C. The sizeof is a unary operator which returns the size of an entity (variable or value).

String Length in C using the sizeof Operator

Syntax


The value is written with the sizeof operator which returns its size (in bytes).

Let us take a look at its implementation:
Code

// finding the length of a string using the sizeof operator

#include <stdio.h>

int main() {
    // initializing the string literal
    char str[] = "g4343"; 
    
    // printing the string
    printf("The given string is %sn", str);
    
    // initializing the length variable
    int length;
    
    // using the sizeof operator to find the length of the string
    length = sizeof str; 
    
    // printing the length of string
    printf("The length of the string is %d", length-1); 
 
    return 0;
}

Output

The given string is g4343
The length of the string is 5

In the above example, we are finding the length of the string “g4343” using the sizeof operator in C. The sizeof operator returns its length as 6 in the output as It returns the size of an operand, not the string length (including null values). But here, if we print length-1 then we get the length of the string.

Conclusion

  • In C, the length of a string is the count of all its characters except the null character “”.
  • We can find the length of the string using a for loop by counting each character in each iteration.
  • The built-in library function strlen() is used to return the length of a string passed to it.
  • We can also find the length of a C String using the sizeof operator.

I’m trying to find a way to find the length of an integer (number of digits) and then place it in an integer array. The assignment also calls for doing this without the use of classes from the STL, although the program spec does say we can use “common C libraries” (gonna ask my professor if I can use cmath, because I’m assuming log10(num) + 1 is the easiest way, but I was wondering if there was another way).

Ah, and this doesn’t have to handle negative numbers. Solely non-negative numbers.

I’m attempting to create a variant “MyInt” class that can handle a wider range of values using a dynamic array. Any tips would be appreciated! Thanks!

LihO's user avatar

LihO

41k11 gold badges99 silver badges166 bronze badges

asked Mar 26, 2014 at 0:13

user1888527's user avatar

5

Not necessarily the most efficient, but one of the shortest and most readable using C++:

std::to_string(num).length()

answered Feb 9, 2016 at 10:42

Riot's user avatar

RiotRiot

15.5k4 gold badges59 silver badges66 bronze badges

1

The number of digits of an integer n in any base is trivially obtained by dividing until you’re done:

unsigned int number_of_digits = 0;

do {
     ++number_of_digits; 
     n /= base;
} while (n);

Uman Shahzad's user avatar

answered Mar 26, 2014 at 0:17

Kerrek SB's user avatar

Kerrek SBKerrek SB

461k92 gold badges869 silver badges1075 bronze badges

3

There is a much better way to do it

    #include<cmath>
    ...
    int size = trunc(log10(num)) + 1
....

works for int and decimal

Community's user avatar

answered Aug 4, 2017 at 16:02

kunz's user avatar

kunzkunz

1,0351 gold badge11 silver badges27 bronze badges

3

If you can use C libraries then one method would be to use sprintf, e.g.

#include <cstdio>

char s[32];

int len = sprintf(s, "%d", i);

answered Mar 26, 2014 at 0:16

Paul R's user avatar

Paul RPaul R

208k35 gold badges386 silver badges555 bronze badges

2

“I mean the number of digits in an integer, i.e. “123” has a length of 3″

int i = 123;

// the "length" of 0 is 1:
int len = 1;

// and for numbers greater than 0:
if (i > 0) {
    // we count how many times it can be divided by 10:
    // (how many times we can cut off the last digit until we end up with 0)
    for (len = 0; i > 0; len++) {
        i = i / 10;
    }
}

// and that's our "length":
std::cout << len;

outputs 3

answered Mar 26, 2014 at 0:18

LihO's user avatar

LihOLihO

41k11 gold badges99 silver badges166 bronze badges

0

Closed formula for the longest int (I used int here, but works for any signed integral type):

1 + (int) ceil((8*sizeof(int)-1) * log10(2))

Explanation:

                  sizeof(int)                 // number bytes in int
                8*sizeof(int)                 // number of binary digits (bits)
                8*sizeof(int)-1               // discount one bit for the negatives
               (8*sizeof(int)-1) * log10(2)   // convert to decimal, because:
                                              // 1 bit == log10(2) decimal digits
    (int) ceil((8*sizeof(int)-1) * log10(2))  // round up to whole digits
1 + (int) ceil((8*sizeof(int)-1) * log10(2))  // make room for the minus sign

For an int type of 4 bytes, the result is 11. An example of 4 bytes int with 11 decimal digits is: “-2147483648”.

If you want the number of decimal digits of some int value, you can use the following function:

unsigned base10_size(int value)
{
    if(value == 0) {
        return 1u;
    }

    unsigned ret;
    double dval;
    if(value > 0) {
        ret = 0;
        dval = value;
    } else {
        // Make room for the minus sign, and proceed as if positive.
        ret = 1;
        dval = -double(value);
    }

    ret += ceil(log10(dval+1.0));

    return ret;
}

I tested this function for the whole range of int in g++ 9.3.0 for x86-64.

answered May 18, 2015 at 15:20

lvella's user avatar

lvellalvella

12.5k11 gold badges52 silver badges106 bronze badges

3

int intLength(int i) {
    int l=0;
    for(;i;i/=10) l++;
    return l==0 ? 1 : l;
}

Here’s a tiny efficient one

answered Dec 8, 2015 at 11:50

Naheel's user avatar

NaheelNaheel

4873 silver badges13 bronze badges

1

Being a computer nerd and not a maths nerd I’d do:

char buffer[64];
int len = sprintf(buffer, "%d", theNum);

answered Mar 26, 2014 at 0:17

John3136's user avatar

John3136John3136

28.7k4 gold badges49 silver badges68 bronze badges

1

Would this be an efficient approach? Converting to a string and finding the length property?

int num = 123  
string strNum = to_string(num); // 123 becomes "123"
int length = strNum.length(); // length = 3
char array[3]; // or whatever you want to do with the length

answered Apr 10, 2015 at 20:18

Aris94's user avatar

Aris94Aris94

712 silver badges8 bronze badges

1

How about (works also for 0 and negatives):

int digits( int x ) { 
    return ( (bool) x * (int) log10( abs( x ) ) + 1 );
}

answered Dec 10, 2017 at 8:53

Sir Alucard's user avatar

Best way is to find using log, it works always

int len = ceil(log10(num))+1;

answered May 13, 2018 at 6:16

tsukyonomi06's user avatar

tsukyonomi06tsukyonomi06

4541 gold badge5 silver badges15 bronze badges

2

Code for finding Length of int and decimal number:

#include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
        int len,num;
        cin >> num;
        len = log10(num) + 1;
        cout << len << endl;
        return 0;
    }
    //sample input output
    /*45566
    5

    Process returned 0 (0x0)   execution time : 3.292 s
    Press any key to continue.
    */

answered Apr 7, 2018 at 5:22

Tanim_113's user avatar

Tanim_113Tanim_113

3111 gold badge3 silver badges11 bronze badges

There are no inbuilt functions in C/C++ nor in STL for finding length of integer but there are few ways by which it can found
Here is a sample C++ code to find the length of an integer, it can be written in a function for reuse.

#include<iostream>
using namespace std;

int main()
{
  long long int n;
  cin>>n;
  unsigned long int integer_length = 0;

  while(n>0)
  {    
   integer_length++;
   n = n/10; 
  }
 
  cout<<integer_length<<endl;

 return 0;
}

Here is another way, convert the integer to string and find the length, it accomplishes same with a single line:

#include<iostream>
#include<cstring>
using namespace std;

    int main()
    {
        long long int n;
    cin>>n;
    unsigned long int integer_length = 0;
    
    // convert to string
    integer_length = to_string(n).length();
    
    cout<<integer_length<<endl;

    return 0;
    }

Note: Do include the cstring header file

answered Mar 2, 2021 at 7:20

Saptarshi das's user avatar

The easiest way to use without any libraries in c++ is

#include <iostream>
using namespace std;

int main()
{
    int num, length = 0;
    cin >> num;
    while(num){
        num /= 10;
        length++;
    }
    cout << length;
}

answered Sep 24, 2021 at 10:35

karanforprogram1's user avatar

1

You can also use this function:

int countlength(int number)
{
    static int count = 0;
    if (number > 0)
    {
        count++;
        number /= 10;
        countlength(number);
    }
    return count;
}

answered Sep 20, 2022 at 11:44

M.Jafar's user avatar

1

#include <math.h>

int intLen(int num)
{        
    if (num == 0 || num == 1)
        return 1;
    else if(num < 0)
        return ceil(log10(num * -1))+1;
    else
        return ceil(log10(num));
}

answered Feb 21 at 13:59

Refael's user avatar

RefaelRefael

6,5839 gold badges35 silver badges54 bronze badges

1

Most efficient code to find length of a number.. counts zeros as well, note “n” is the number to be given.

#include <iostream>
using namespace std;
int main()
{
    int n,len= 0;
    cin>>n;
while(n!=0)
    {
       len++;
       n=n/10;
    }
    cout<<len<<endl;
    return 0;
}

answered Sep 26, 2019 at 12:00

apex predator's user avatar

2

Let us assume I have declared the variable ‘i’ of certain datatype (might be int, char, float or double) …

NOTE: Simply consider that ‘i’ is declared and dont bother if it is an int or char or float or double datatype. Since I want a generic solution I am simply mentioning that variable ‘i’ can be of any one of the datatypes namely int, char, float or double.

Now can I find the size of the variable ‘i’ without sizeof operator?

Simson's user avatar

Simson

3,2982 gold badges23 silver badges38 bronze badges

asked Sep 8, 2009 at 11:10

codingfreak's user avatar

codingfreakcodingfreak

4,44711 gold badges47 silver badges60 bronze badges

5

You can use the following macro, taken from here:

#define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var))) 

The idea is to use pointer arithmetic ((&(var)+1)) to determine the offset of the variable, and then subtract the original address of the variable, yielding its size. For example, if you have an int16_t i variable located at 0x0002, you would be subtracting 0x0002 from 0x0006, thereby obtaining 0x4 or 4 bytes.

However, I don’t really see a valid reason not to use sizeof, but I’m sure you must have one.

answered Sep 8, 2009 at 11:13

João Silva's user avatar

João SilvaJoão Silva

88.8k29 gold badges150 silver badges158 bronze badges

9

It’s been ages since I wrote any C code and I was never good at it, but this looks about right:

int i = 1;
size_t size = (char*)(&i+1)-(char*)(&i);
printf("%zin", size);

I’m sure someone can tell me plenty of reasons why this is wrong, but it prints a reasonable value for me.

answered Sep 8, 2009 at 11:16

Joachim Sauer's user avatar

Joachim SauerJoachim Sauer

301k57 gold badges553 silver badges612 bronze badges

14

This works..

int main() {
    int a; //try changing this to char/double/float etc each time//
    char *p1, *p2;
    p1 = &a;
    p2 = (&a) + 1;
    printf("size of variable is:%dn", p2 - p1);
}

soktinpk's user avatar

soktinpk

3,7482 gold badges21 silver badges33 bronze badges

answered Oct 21, 2014 at 2:06

Achu's user avatar

2

int *a, *b,c,d;/* one must remove the declaration of c from here*/
int c=10;
a=&c;
b=a;
a++;
d=(int)a-(int)b;
printf("size is %d",d);

Community's user avatar

answered Apr 6, 2011 at 16:51

ra1's user avatar

2

I hope that below code would solve your problem in c++ without using sizeof() operator

for any variables like (int, char, float, double, char, short and many more…)

here I take integer,

int a;

then
show it as byte addressable output,

cout<<(char *)(&a + 1) - (char *)(&a);

B_San's user avatar

answered Jan 22, 2020 at 15:13

Ankit Singh's user avatar

Ankit SinghAnkit Singh

3543 silver badges5 bronze badges

This should work.

#define xsizeof(x) (char *)(&x+1) - (char *)&x

answered May 16, 2021 at 17:10

Vijay S B's user avatar

Vijay S BVijay S B

1,2411 gold badge12 silver badges24 bronze badges

Try this,

#define sizeof_type( type )  ((size_t)((type*)1000 + 1 )-(size_t)((type*)1000))

For the following user-defined datatype,

struct x
{
    char c;
    int i;
};

sizeof_type(x)          = 8
(size_t)((x*)1000 + 1 ) = 1008
(size_t)((x*)1000)      = 1000

answered Nov 12, 2010 at 7:38

josh's user avatar

joshjosh

13.6k12 gold badges49 silver badges58 bronze badges

This should give you the size of your variable

#define mySizeof(type) ((uint)((type *)0+1))

Dan Oberlam's user avatar

Dan Oberlam

2,4259 gold badges36 silver badges54 bronze badges

answered Jun 12, 2014 at 0:51

Karthick S's user avatar

1

Program to find Size of the variable without using sizeof operator

#include<stdio.h>
int main()
  {
  int *p,*q;
  int no;
  p=&no;
   printf("Address at p=%un",p);
  q=((&no)+1);
  printf("Address at q=%un",q);
  printf("Size of int 'no': %d Bytesn",(int)q-(int)p);

  char *cp,*cq;
    char ch;
  cp=&ch;
  printf("nAddress at cp=%un",cp);
  cq=cp+1;
  printf("Address at cq=%un",cq);
  printf("Size of Char=%u Byten",(int)cq-(int)cp);

  float *fp,*fq;
  float f;
  fp=&f;
 printf("nAddress at fp=%un",fp);
  fq=fp+1;
  printf("Address at fq=%un",fq);
  printf("Size of Float=%u Bytesn",(int)fq-(int)fp);

  return 0;
}

Jakuje's user avatar

Jakuje

24.3k12 gold badges65 silver badges74 bronze badges

answered Dec 15, 2015 at 19:08

Debashis Sahoo's user avatar

Debashis SahooDebashis Sahoo

5,2084 gold badges36 silver badges41 bronze badges

#define GET_SIZE(myvar)   ((char)( ((char*)(&myvar+1) )- ((char*)&myvar) ))

EsmaeelE's user avatar

EsmaeelE

2,2316 gold badges22 silver badges31 bronze badges

answered Sep 21, 2022 at 12:55

Mohamed el azhary's user avatar

1

#include<stdio.h>

#include<conio.h>

struct size1


  {
int a;
char b;
float c;
};

void main()
{
struct size1 *sptr=0;  //declared one pointer to struct and initialise it to zero//
sptr++;                 
printf("size:%dn",*sptr);
getch();
}

answered Sep 30, 2011 at 18:28

Nitesh Pratap Singh's user avatar

Below statement will give generic solution:

printf("%lin", (void *)(&i + 1) - (void *)(&i));

i is a variable name, which can be any data type (char, short, int, float, double, struct).

JJJ's user avatar

JJJ

32.8k20 gold badges89 silver badges102 bronze badges

answered Jul 20, 2016 at 8:53

vikram p's user avatar

1

n971030

188 / 120 / 4

Регистрация: 23.01.2010

Сообщений: 1,320

1

Как узнать длину строки?

08.02.2012, 22:25. Показов 104029. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Как узнать длинну строки

C#
1
2
  string xc = "asdfghjk";
  byte l = xc.length();

выше код дает сбой, кажеться он поределят поток а не количество сиволов в переменной xc



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

08.02.2012, 22:25

Ответы с готовыми решениями:

Как узнать длину строки
Казалось бы, вопрос глупый. Берём что-то наподобие
string s = &quot;Veterinar&quot;;
int len = s.Length;
В…

Как узнать длину строки в байтах?
Есть код:

using (FileStream fs = File.Create(fileName))
{

Как узнать длину строки в динамическом двухмерном массиве?
Недавно, столкнулся с проблемой, что нужно определить количество символов в строке List’а, а не…

Узнать длину строки двумерного массива?
Например дан массив n*m:

int arr = {{1,2,3},
{4,5,6},
Нужно вытащить размер…

7

I2um1

Злой няш

2136 / 1505 / 565

Регистрация: 05.04.2010

Сообщений: 2,881

08.02.2012, 22:28

2

У меня код выше дает ошибку компиляции.
К слову:

C#
1
2
string xc = "asdfghjk";
int l = xc.Length;



1



n971030

188 / 120 / 4

Регистрация: 23.01.2010

Сообщений: 1,320

08.02.2012, 22:33

 [ТС]

3

Цитата
Сообщение от Blood-Angel
Посмотреть сообщение

У меня код выше дает ошибку компиляции.
К слову:

C#
1
2
string xc = "asdfghjk";
int l = xc.Length;

int b = value.Length;
подскажите если знаете?? как определить кол-во символов в строке типа стринги



0



Злой няш

2136 / 1505 / 565

Регистрация: 05.04.2010

Сообщений: 2,881

08.02.2012, 22:38

4

Цитата
Сообщение от n971030
Посмотреть сообщение

как определить кол-во символов в строке типа стринги

Этот код это и делает.



1



Сtrl

144 / 134 / 8

Регистрация: 19.07.2011

Сообщений: 184

08.02.2012, 22:39

5

C#
1
2
3
string str = "Это юникод-строка. Have a nice day!";
int strLen = str.Length;
Console.WriteLine("Количество символов в строке = {0}", strLen);



5



188 / 120 / 4

Регистрация: 23.01.2010

Сообщений: 1,320

08.02.2012, 22:41

 [ТС]

6

Цитата
Сообщение от Blood-Angel
Посмотреть сообщение

Этот код это и делает.

СОРИ ЗА ТУПОСТЬ СРАЗУ ПРОСТО НЕ СРАБОТАЛО А ВЕДЬ ЗНАЛ!! НО ВСЕРАВНО СПАСИБО



1



EdwardTeach

0 / 0 / 0

Регистрация: 31.01.2017

Сообщений: 8

13.11.2018, 14:08

7

C#
1
2
3
4
5
6
7
8
string inputString = "";
 
            do
            {
                Console.WriteLine("Введите слово длиной в 7 символов");
                inputString = Console.ReadLine();
            }
            while (inputString.Length != 7);



0



maxim0192

0 / 0 / 0

Регистрация: 10.04.2016

Сообщений: 14

Записей в блоге: 3

24.12.2021, 20:17

8

Мой метод определения длины строки.
Принимает в себя строку, очевидно. Возвращает количество символов в данной строке в int-е.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static int StringLength(string input)
        {
            int counter = 0;
            if (input is null)
            {
                return 0;
            }
 
            foreach (var c in input)
            {
                //Console.WriteLine(c);
                counter++;
            }
 
            //Console.WriteLine($"The following string has {counter} characters in it.");
            //Console.WriteLine($"{input}");
            return counter;
        }



0




Содержание

  • 1. Какие характерные особенности типа string в языке C#?
  • 2. Способы создания экземпляра s типа string
  • 3. Как в переменную типа string занести значение строки? Операция присваивания =
  • 4. Как определить, равны ли две строки типа string между собой? Операция сравнения ==
  • 5. Как сравнить две строки типа string в лексикографическом порядке? Метод CompareTo()
  • 6. Как соединить две строки типа string? Метод Concat(), операция +
  • 7.Как скопировать одну строку типа string в другую? Метод Copy(), оператор присваивания =
  • 8. Вставка подстроки начиная из заданного индекса. Метод Insert()
  • 9. Поиск и получение индекса первого вхождения подстроки в данную строку. Метод IndexOf()
  • 10. Поиск и получение индекса последнего вхождения подстроки в данную строку функцией LastIndexOf()
  • 11. Как определить длину строки типа string? Свойство Length
  • 12. Создание строки заданной ширины. Методы PadLeft() и PadRight()
  • 13. Удаление заданного количества символов из строки. Метод Remove()
  • 14. Замена символов в строке. Метод Replace()
  • 15. Как в строке выделить подстроку. Метод Substring()
  • 16. Преобразование числовой строки типа string в целое число. Метод Parse()
  • 17. Преобразование целого числа в строку. Метод ToString()
  • 18. Преобразование строки string в число с плавающей запятой (вещественное число)
  • 19. Преобразование числа с плавающей запятой в string
  • 20. Перевод значения переменной логического типа bool в строку string
  • 21. Постоянство строк. Как в строке типа string заменить символ в заданной позиции: s[index] = c

Поиск на других ресурсах:

1. Какие характерные особенности типа string в языке C#?

В языке C# встроенный тип данных string поддерживает символьные строки в кодировке Unicode. Для строк типа string можно выделить следующие особенности:

  • любая переменная типа string представляет собой объект класса System.String;
  • тип string относится к ссылочным типам а не типам-значениям;
  • строки типа string размещаются в «куче» (heap);
  • к строкам типа string можно применять разнообразные методы, свойства и операции;
  • строку типа string можно создавать с использованием оператора new и без использования этого оператора путем присваивания =;
  • содержимое объекта типа string изменить нельзя.

Пример строки-литерала типа string:

"This is a text"

  ⇑


2. Способы создания экземпляра типа string

Как известно тип string есть псевдонимом класса System.String, который имеет несколько конструкторов. С помощью этих конструкторов можно создавать экземпляры класса string. Ниже приводится пример программы, в которой продемонстрировано создание экземпляров типа string разными способами.

using System;

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
      // Способы создания экземпляра типа string
      // 1. Создание и инициализация строки при объявлении
      string s1 = "Hello";
      Console.WriteLine("s1 = {0}", s1);

      // 2. Создание строки из массива типа char[]
      char[] ArrayChar = { 'H', 'e', 'l', 'l', 'o' };
      string s2 = new string(ArrayChar);
      Console.WriteLine("s2 = {0}", s2);

      string s3 = new string(ArrayChar, 2, 3); // получить часть строки
      Console.WriteLine("s3 = {0}", s3);

      // 3. Создание строки с помощью перегруженного оператора присваивания =
      string s4;
      s4 = "Hello";
      Console.WriteLine("s4 = {0}", s4);

      // 4. Создание строки из одного символа
      string s5 = new string('+', 10); // символ '+' - 10 раз
      Console.WriteLine("s5 = {0}", s5);

      // 5. Буквальные строки (verbatim strings)
      string s6;
      s6 = @"C:Programsabc.txt"; // это буквальная строка, перед строкой размещен @
      Console.WriteLine("s6 = {0}", s6);          
      Console.ReadKey();
    }
  }
}

Результат выполнения программы

s1 = Hello
s2 = Hello
s3 = llo
s4 = Hello
s5 = ++++++++++
s6 = C:Programsabc.txt

  ⇑


3. Как в переменную типа string занести значение строки? Операция присваивания =

Для этого нужно использовать оператор присваивания ‘=‘.

Вариант 1. Присваивание после описания.

string s; // описание переменной
s = "This is a text"; // присваивание значения текста

Вариант 2. Присваивание во время описания (начальная инициализация).

string s = "This is a text"; // начальная инициализация

Вариант 3. Использование метода Copy().

s = string.Copy("This is a text"); // s = "This is a text"

  ⇑


4. Как определить, равны ли две строки типа string между собой? Операция сравнения ==

Две строки можно сравнивать обычным оператором сравнения «==«.

Фрагмент кода, который определяет равенство (неравенство) двух строк:

string s1 = "Hello!";
string s2 = "Hello!";
bool f_equal;
if (s1 == s2)
    f_equal = true;
else
    f_equal = false;

  ⇑


5. Как сравнить две строки типа string в лексикографическом порядке? Метод CompareTo()

В этом случае можно использовать метод CompareTo(). Метод возвращает -1, 0 или 1.

В приведенном примере видно результат работы метода.

string s1 = "abcd";
string s2 = "abcde";
int res;
res = s1.CompareTo(s2); // res = -1, (s1<s2)
res = s2.CompareTo(s1); // res = 1, (s2>s1)
s2 = s1; // строки равны
res = s1.CompareTo(s2); // res = 0, (s1==s2)
res = s2.CompareTo(s1); // res = 0


  ⇑

6. Как соединить две строки типа string? Метод Concat(), операция +

Способ №1 — функция Concat().

string s1 = "Hello ";
string s2 = "world!";
string s3;
s3 = string.Concat(s1, s2); // s3 = "Hello world!"

Способ № 2 — использование оператора «+».

string s1 = "Hello ";
string s2 = "world!";
string s3;
s3 = s1 + s2; // s3 = "Hello world!"

  ⇑


7. Как скопировать одну строку типа string в другую? Метод Copy(), оператор присваивания =

Способ № 1 — оператор присваивания.

string s1 = "My string";
string s2;
s2 = s1; // s2 = "My string"

Способ №2 — метод Copy().

string s1 = "My string";
string s2;
s2 = string.Copy(s1); // s2 = "My string"

  ⇑


8. Вставка подстроки начиная из заданного индекса. Метод Insert()

Для вставки подстроки используется функция Insert(). Функция принимает два параметра. Первый параметр – позиция индекса в строке, из которой делается вставка (начинается с 0). Второй параметр – текст самой строки.

string s1 = "ABEF";
string s2;
s2 = s1.Insert(2, "CD"); // s2 = "ABCDEF"
s1 = "123";
s2 = s1.Insert(0, "555"); // s2 = "555123"

// Ошибка!
// Заданный аргумент находится за пределами допустимых значений.
// s2 = s1.Insert(20, "33");

Если задать неверный индекс за пределами диапазона, то будет сгенерирована исключительная ситуация.

  ⇑


9. Поиск и получение индекса первого вхождения подстроки в данную строку. Метод IndexOf()

Эта операция реализуется функцией IndexOf(). Если найдена подстрока в строке, то функция возвращает позицию первого вхождения. В другом случае функция возвращает -1.

Функция имеет перегруженные варианты реализации.

string s = "Hello world!";
int index;
index = s.IndexOf("wor"); // index = 6
index = s.IndexOf("abc"); // index = -1

// другой вариант функции IndexOf()
index = s.IndexOf("wor", 7); // index = -1 - поиск из позиции 7
index = s.IndexOf("wor", 0); // index = 6 - поиск из позиции 0

// поиск идет от заданного индекса (3)
// и проверяется заданное количество символов (5)
index = s.IndexOf("wo", 3, 5); // index = 6

  ⇑


10. Поиск и получение индекса последнего вхождения подстроки в данную строку функцией LastIndexOf().

Функция имеет несколько перегруженных реализаций. Нумерация индекса последнего вхождения начинается с 0.

string s = "bestprog.net";
int index;
index = s.LastIndexOf("prog"); // index = 4

  ⇑


11. Как определить длину строки типа string? Свойство Length

Для определения длины строки (количество символов) типа string используется свойство Length.

string s = "bestprog.net";
int len;
len = s.Length; // len = 12
s = ""; // len = 0

  ⇑


12. Создание строки заданной ширины. Функции PadLeft() и PadRight()

Функции PadLeft() и PadRight() используются для создания форматированной строки, в которой позиции справа или слева заполняются пробелами.

string s1 = "abc";
string s2;
s2 = s1.PadLeft(5); // s2 = " abc"
s2 = s1.PadLeft(2); // s2 = "abc"
s2 = s1.PadLeft(9); // s2 = "     abc"

// ошибка "Non-negative number required."
// "Нужно неотъемлемое число
// s2 = s1.PadLeft(-2);

s2 = s1.PadRight(2); // s2 = "abc"
s2 = s1.PadRight(8); // s2 = "abc     "

  ⇑


13. Удаление заданного количества символов из строки. Функция Remove()

Функция Remove() имеет две реализации. В первой реализации функция имеет два параметра. Во второй – один параметр.

Пример 1. Реализация функции Remove() с двумя параметрами.

string s1 = "0123456789";
string s2;
s2 = s1.Remove(3, 2); // s2 = "01256789"

В данном примере функция Remove() получает два параметра. Первый параметр – позиция, из которой делается удаление. Второй параметр – количество удаленных символов.

Пример 2. Реализация с одним параметром.

string s1 = "0123456789";
string s2;
s2 = s1.Remove(4); // s2 = "0123"

В этом примере функция получает один параметр. Этот параметр определяет позицию из которой будет осуществлено удаление символов до конца строки.

Если указать

s2 = s1.Remove(0);

то будет удалена вся строка.

Пример 3. Если нужно удалить последний символ в строке, то нужно написать такой код.

string s1 = "This is a text!";
string s2;
int len;
len = s1.Length;
s2 = s1.Remove(len-1); // s2 = "This is a text"

  ⇑


14. Замена символов в строке. Функция Replace()

Функция Replace() имеет два варианта реализации.

Первый вариант оперирует строками типа string. Второй вариант оперирует типом char.

Пример 1. Использование функции Replace() для замены одной строки на другую.

string s1 = "0123456789";
string s2;
s2 = s1.Replace("012", "ABC"); // s2 = "ABC3456789"

Пример 2. Использование функции Replace() для замены символа ‘0’ на символ ‘A’.

string s1 = "0123456789";
string s2;
s2 = s1.Replace('0', 'A'); // s2 = "A123456789"

  ⇑


15. Как в строке выделить подстроку. Функция Substring()

Функция Substring() имеет две реализации.

Вариант 1. Выделение подстроки с заданной позиции до конца строки.

string s1 = "Automobile";
string s2;
s2 = s1.Substring(4); // s2 = "mobile

Вариант 2. Выделение подстроки с заданной позиции (параметр 1) в заданном количестве символов (параметр 2).

string s1 = "Automobile";
string s2;
s2 = s1.Substring(0, 4); // s2 = "Auto"

  ⇑


16. Преобразование числовой строки типа string в целое число. Функция Parse()

Функция Parse() разрешает переводить строку, которая состоит из цифр, в целое число. Такая функция полезна если нужно получить число, которое было введено из клавиатуры и получено в виде строки. Например, ввод из элемента управления типа TextBox.

// string => int
string s = "389";
int i;
i = int.Parse(s);
i = int.Parse("-29"); // i = -29

  ⇑


17. Преобразование целого числа в строку. Функция ToString()

Функция ToString() переводит целое число в его строчное представление. Например, такая функция полезная, если нужно вывести целое число на форму в элементе управления Label.

// int => string
string s;
int i;
i = 230;
s = i.ToString(); // s = "230"

  ⇑


18. Преобразование строки string в число с плавающей запятой (вещественное число)

При преобразовании строки в соответствующее вещественное число, важно учитывать кодировку символов.

Если у вас установлена операционная система с кирилличной кодировкой и настроены соответствующие региональные стандарты, тогда символ ‘.’ может быть заменен на символ ‘,’. Это связано с тем, что в странах, которые используют кириллицу как разделитель между целой и дробной частями, есть символ ‘,’ (запятая). А в англоязычных странах разделителем целой и дробовой частей есть символ ‘.’ (точка).

Символ-разделитель целой и дробной частей можно изменить в региональных настройках Windows.

Поэтому, в ОС Windows с кириллическим кодированием по умолчанию, следующий код вызовет исключительную ситуацию FormatException с сообщением: «Input string was not in a correct format» (Исходная строка имеет неверный формат).

double x;
string s;
s = "9.83";
// генерируется исключительная ситуация FormatException
// с сообщением "Input string was not in a correct format."
x = double.Parse(s);

Ниже приведен правильный вариант для ОС с кирилличной кодировкой:

// string => double
double x;
string s;
s = "9,83";
x = double.Parse(s);

  ⇑


19. Преобразование числа с плавающей запятой в string.
// double => string
double x;
string s;
x = -39.038;
s = x.ToString(); // s = "-39,038"

  ⇑


20. Перевод значения переменной логического типа bool в строку string
// string => bool
bool b;
string s;
s = "true";
b = bool.Parse(s); // b = True

Если ввести неправильное значение в строку s, то генерируется исключительная ситуация с сообщением:

"String was not recognized as a valid Boolean"

  ⇑


21. Постоянство строк. Как в строке типа string заменить символ в заданной позиции: s[index] = c

В языке C# тип string имеет одну особенность. Доступ к отдельному символу строки осуществляется в режиме чтения. Непосредственно изменить значение символа в строке не получится. Это означает, что строки есть постоянными (константными).

Нижеследующий фрагмент кода

string s = "Hello world!";
s[6] = 'W'; // ошибка!!! - символ можно только прочитать
char c;
c = s[6]; // c = 'w' - так работает

в строке

s[6] = 'W';

вызовет ошибку компилятора

Property or indexer 'string.this[int]' cannot be assigned to -- it is read only

Значит, значение символа в заданной позиции строки типа string можно только прочитать.

Чтобы решить эту задачу можно использовать (как пример) один из предложенных способов.

Способ 1. Использование методов Substring() и String(). При использовании этого способа нужно выполнять проверку значения индекса на корректность. Если значение индекса выходит за пределы размерности строки, то возникнет исключительная ситуация.

// Как в строке заменить символ в заданной позиции: s[index]=c
// Способ 1. Использование методов Substring(), ToString().
// Входные данные:
string s = "Hello world!"; // исходная строка
int index = 0; // индекс в строке, где нужно сделать замену (начинается с 0)
char c = '+'; // символ замены

// Проверка значения index на корректность
if ((index >= 0) && (index < s.Length))
  s = s.Substring(0, index) + c.ToString() + s.Substring(index + 1);

Способ 2. Использование оператора цикла.

// Способ 2. Использование цикла и дополнительной строки.
// Если значение index некорректно, то исходная строка не изменяется
// Исходные данные:
string s = "Hello world!"; // исходная строка
int index = 5; // индекс замены (нумеруется с 0)
char c = '+'; // символ замены

string s2 = ""; // дополнительная строка
for (int i = 0; i < s.Length; i++)
  if (i != index) s2 += s[i];
    else s2 += c;
  s = s2;

Способ 3. Использование методов Remove() и Insert(). В этом случае также нужно проверять индекс замены на корректность.

// Способ 3. Методы Insert(), Remove()
// Исходные данные:
string s = "Hello world!"; // исходная строка
int index = 5; // индекс в строке, где нужно сделать замену (нумеруется с 0)
char c = '+'; // символ замены

// Здесь нужно делать проверку на корректность значения pos,
// если index некорректен, то сгенерируется исключение
if ((index >= 0) && (index < s.Length))
{
  s = s.Remove(index, 1);
  s = s.Insert(index, c.ToString());
}

  ⇑


Добавить комментарий