C语言强化——字符串(1)

  1. 实现 mystrcpy(), mystrcmp(), mystrcat(), mystrlen() ;
#include<stdio.h>

void mystrcpy(char *i,char *j) {
    while (*j != '\0') {
        *i = *j;
        i++;
        j++;
    }
}

int mystrcmp(char *i, char *j) {
    if (strlen(i) != strlen(j)) {
        return -1;
    }
    while (*i != '\0') {
        if (*i != *j) {
            return -1;
        }
        i++;j++;
    }
    return 1;
}

void mystrcat(char *i, char *j) {
    while (*i != '\0') i++;
    while (*j != '\0') {
        *i = *j;
        i++;
        j++;
    }
}

int mystrlen(char *i) {
    int num = 0;
    while (*i != '\0') {
        num++;
        i++;
    }
    return num;
}

int main() {

    char a[10] = { 0 };
    char b[10] = { 0 };

    printf("Please input the the string of b:\n");
    scanf("%s", b);

    mystrcpy(a, b);
    printf("strcpy后 a : %s\n", a);

    if (mystrcmp(a, b) == 1) {
        printf("a,b字符串相等\n");
    }
    else {
        printf("a,b字符串不相等\n");
    }

    mystrcat(a, b);
    printf("strcat后 a : %s\n", a);

    printf("%s的长度为%d\n", a, mystrlen(a));

    return 0;
}

  1. 输入一行字符串(单词和若干空格), 输出该行单词个数。

  2. 输出该行单词(每个单词一行)

#include<string>
#include<iostream>
#include<cctype>

using namespace std;

int main() {
 string s;
 freopen("1.txt", "r", stdin);
 getline(cin, s);
 int len = s.size(), num = 0;
 string ans;
 for (int i = 0;i < len;++i) {
     if (isalpha(s[i])) {
         ans += s[i];
         if (!(isalpha(s[i+1]))) {
             cout << ans << endl;
             num++;
             ans.clear();
         }
     }
 }
 cout << num << endl;
 return 0;
}

  1. 输入一行字符串,把字符串翻转 。
#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

int main() {
    string s;
    getline(cin, s);
    reverse(begin(s),end(s));
    cout << s << endl;
}
  1. 大整数加法。实现任意范围的两个整数的加法(提示:整数的范围用 int 型的变量无法表示,50位)
#include<iostream>
#include<string>

using namespace std;

struct bign {
    int d[1000];
    int len;
    bign() {
        memset(d, 0, sizeof(d));
        len = 0;
    }
};

bign change(string str) {   //将整数转换为bign 
    bign a;
    a.len = str.size();
    for (int i = 0;i < a.len;i++) {
        a.d[i] = str[a.len - i - 1] - '0';
    }
    return a;
}
bign add(bign a, bign b) {
    bign c;
    int carry = 0;
    for (int i = 0;i < a.len || i< b.len ;i++) {
        int temp = a.d[i] + b.d[i] + carry;
        c.d[c.len++] = temp % 10;
        carry = temp / 10;
    }
    if (carry != 0) {  //处理进位
        c.d[c.len++] = carry;
    }
    return c;
}
void print(bign a) {
    for (int i = a.len - 1;i >= 0;i--) {
        printf("%d", a.d[i]);
    }
    printf("\n");
}

int main() {
    printf("输入你要计算的两个大整数\n");
    string a, b;
    while (cin >> a && cin >> b) {
        bign num_a = change(a);
        bign num_b = change(b);
        bign ans = add(num_a, num_b);
        print(ans);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Mered1th/p/10628324.html